5

我正在从 C#(使用 SharpZipLib)向 PHP 发送一个 gzip 压缩的字符串,并在其中使用 readgzfile 解压缩。这可行,但是字符串中的每个字符后跟两个奇怪的字符(在控制台中使用 vim,这些字符显示为^@)。我也尝试使用 gzopen/gzread,但结果相同。

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

虽然这可行,但我想知道发生了什么以及为什么这样我可以确保这将始终有效或提出更好的解决方案。

4

1 回答 1

0

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

您可以自己验证这一点,方法是使用bin2hex($string)并检查十六进制表示,而不是依赖 vim。

如果其中一个UTF-16UCS2正在使用,您可以像这样转换它们:

// iconv($from, $to, $str)
$clean = iconv('UTF-16', 'UTF-8', $string);
于 2012-10-24T05:40:56.667 回答