2012-10-22 5 views
5

Wysyłam gzipowany ciąg z C# (używając SharpZipLib) do PHP, gdzie rozpakowuję plik readgz. To działa, jednak po każdym znaku w ciągu znaków występują dwa dziwne znaki (za pomocą vima w konsoli są one wyświetlane jako ^@). Próbowałem również z gzopen/gzread, ale z tymi samymi wynikami.W PHP każda znak w zdekompresowanym łańcuchu gz jest poprzedzana przez^@, dlaczego?

Po wyczyszczeniu znaków spoza ASCII z ciągu znaków za pomocą $clean= preg_replace('/[^(\x20-\x7F)]*/','', $string); ciąg znaków $ clean jest identyczny z ciągiem w języku C#.

Podczas tych czynności chciałbym wiedzieć, co się dzieje i dlaczego, więc mogę się upewnić, że to zawsze zadziała lub wymyśli lepsze rozwiązanie.

+4

Czy ciąg źródło w UCS2 lub UTF-16 może? – mario

+0

Nie stosuję ani nie konwertuję do określonego kodowania. Może powinienem jednak, jakie kodowanie powinienem wtedy użyć? – Whiskey

Odpowiedz

0

Zakładając, że ciąg znaków jest tworzony w systemie Windows, prawdopodobnie używane jest niektóre kodowanie wielobajtowe.

Możesz to zweryfikować samodzielnie, używając bin2hex($string) i sprawdź szesnastkową reprezentację zamiast polegać na vimie.

Jeśli są używane zarówno UTF-16 lub UCS2, można przekonwertować je tak:

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

To wystarczyło, więc domyślam się, że używa jednego z tych dwóch. Dzięki. – Whiskey

Powiązane problemy