在PHP中,解压缩的Gz字符串中的每个字符都在 ^@,为什么



我正在通过C#(使用SharpZiplib)的GZZ String发送到PHP,然后我用ReadGzfile解压缩。但是,这起作用了,但是字符串中的每个字符之后都有两个奇怪的字符(使用控制台中的VIM将显示为^@)。我还尝试了Gzopen/gzread,但结果相同。

当我用$clean= preg_replace('/[^(x20-x7F)]*/','', $string);从字符串中清理非ASCII字符时,$ Clean String与C#中的字符串相同。

当它起作用时,我想知道发生了什么,为什么我可以确保这将始终有效或提出更好的解决方案。

鉴于字符串是在Windows上创建的,很可能正在使用一些多键编码。

您可以自己使用bin2hex($string)并检查十六进制表示而不是依靠VIM。

如果使用UTF-16UCS2,则可以像这样转换它们:

// iconv($from, $to, $str)
$clean = iconv('UTF-16', 'UTF-8', $string);

最新更新