2012-10-22 11 views
5

私はgzipされた文字列をC#(SharpZipLibを使用)からPHPに送ってreadgzfileで解凍します。これは動作しますが、文字列の各文字の後ろに2つの奇妙な文字が続きます(コンソールでvimを使用すると、^@と表示されます)。私もgzopen/gzreadを試しましたが、同じ結果でした。PHPでは、圧縮されたgz文字列の各文字の後に^ @、なぜですか?

$clean= preg_replace('/[^(\x20-\x7F)]*/','', $string);の文字列から非ASCII文字を消去すると、$ clean文字列はC#の文字列と同じになります。

これは機能しますが、何が起こっているのか、なぜこれが問題なのかを知りたいのですが、これが常に機能するか、より良い解決策が出てくるかどうかを確認したいと思います。

+4

は、おそらくあなたのソースUCS2の文字列またはUTF-16ましたか? – mario

+0

特定のエンコーディングには適用されていません。おそらく、私はどんなエンコーディングを使うべきですか? – Whiskey

答えて

0

文字列がWindowsで作成されていると、マルチバイトエンコーディングが使用されている可能性があります。

bin2hex($string)を使用してこれを確認し、vimに頼るのではなく16進表現を確認してください。

UTF-16UCS2のいずれかが使用されている場合、あなたはそのようにそれらを変換することができます:

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

それはトリックでしたので、私はそれらの2つのうちの1つを使用していると思います。ありがとう。 – Whiskey

関連する問題