2015-02-12 13 views
6

Witajcie. Zawsze miałem problemy z iconv. Teraz muszę konwertować ciąg do windows-1250 i to nie wydaje się działać:php - iconv konwersja z UTF-8 na Windows-1250 nie działa

$string = "ľaľa ho papľuha, ogrcal mi krpce!"; 
echo $string . ' (' . mb_detect_encoding($string) . ') <br>'; 
$string_encoded = iconv(mb_detect_encoding($string), 'Windows-1250//TRANSLIT', $string); 
echo $string_encoded . ' (' . mb_detect_encoding($string_encoded) . ') <br>'; 
$string_encoded = mb_convert_encoding($string, 'Windows-1250'); 
echo $string_encoded . ' (' . mb_detect_encoding($string_encoded) . ') <br>'; 

Trzy Echos nad wyjściem dokładnie to:

ľaľa ho papľuha, ogrcal mi krpce! (UTF-8) 
�a�a ho pap�uha, ogrcal mi krpce! () 
mb_convert_encoding() Unknown encoding &quot;Windows-1250&quot; (ASCII) 

Odkąd zawsze widział ten diament znaki zapytania Zastanawiam się, czy ta funkcja php działa w ogóle. Jak mogę przekonwertować UTF-8 na Windows-1250?

  • Plik został zapisany w notatniku ++ w UTF-8
  • Również próbowałem header ('Content-Type: text/html; charset = windows-1250'); i setLocale()

Odpowiedz

3

Znak is wskazuje, że tekst jest interpretowany jako UTF-8, ale w tym momencie napotkano niepoprawną sekwencję bajtów. Oznacza to, że nie obsługujesz UTF-8, ale klient odczytuje go jako UTF-8. Co oznaczałoby, że iconv działa dobrze, a ktokolwiek czyta wynik, nie otrzymał komunikatu, że powinien interpretować go jako Windows-1250.

Zobacz What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text i Handling Unicode Front To Back In A Web App.

+1

Tak masz rację. Kodowanie zostało wysłane jako Windows-1250, ale przeglądarka nie wyświetliła go poprawnie –

1

jest stary post, ale można przekonwertować UTF-8 na Windows-1252 i będzie mieć taki sam skutek:

$str = "ľaľa ho papľuha, ogrcal mi krpce!" 
$str = mb_convert_encoding($str, "Windows-1252", "UTF-8"); 

ale jeśli naprawdę potrzebujesz windows-1250 można używać THIS SOLUTION i dostosować do własnych potrzeb.

0

Doświadczyłem podobnego problemu. Podczas odczytu pliku CSV słowo "Česká republika" zostało odczytane jako "Èeská republika".

to rozwiązać to dla mnie:

iconv("Windows-1250", "UTF-8", ($string));