web-dev-qa-db-ja.com

UTF-8からWindows-1250へのiconv変換が機能しない

私はいつもiconvで問題を抱えていました。文字列をWindows-1250に変換する必要がありますが、これは機能しないようです。

_$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>';
_

上記の3つのエコーは、まさにこれを出力します。

_ľ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 )
_

このひし形の疑問符をいつも見てきたので、このPHP関数はまったく機能するのだろうかと思います。UTF-8をWindows-1250に変換するにはどうすればよいですか?

  • ファイルはUTF-8のnotepad +に保存されました
  • また、header('Content-Type: text/html; charset=windows-1250');setLocale()を試しました
8

�文字は、テキストがUTF-8として解釈されていることを示していますが、この時点で無効なバイトシーケンスが検出されました。つまり、UTF-8を提供していませんが、クライアントはそれをUTF-8として読み取っています。これは、iconvが正常に機能していて、結果を読んでいる人が、Windows-1250として解釈する必要があるというメッセージを受け取らなかったことを意味します。

すべてのプログラマーがテキストを操作するためのエンコーディングと文字セットについて絶対に知っておく必要があること および WebアプリでUnicodeを前後に処理する を参照してください。

4
deceze

同様の問題が発生しました。 CSVファイルを読んでいるときに、Word「Českárepublika」は「Èeskárepublika」と読みました。

これは私のためにそれを解決しました:

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

古い投稿ですが、UTF-8をWindows-1252に変換すると、同じ効果が得られます。

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

しかし、本当にWindows-1250が必要な場合は、 このソリューション を使用して、ニーズに合わせることができます。

正解はiconv( "UTF-8", "Windows-1250", $string );です

0
Pavel Vydra