2011-12-07 9 views
2

今日でも、頻繁な頻度で文字エンコーディングの問題が発生します。例えば、この最近のジョブポストを取る:文字エンコーディングと問題

Bad Encoding

:これは一例であり、スパムではないジョブポスト... :-)

私は最近、正確なことを見てきましたウェブサイト、一般的なIMプログラム、およびCNNの背景グラフィックでのエラー。

私の2部構成の質問:

  • この特定の、一般的なエンコーディングの問題の原因は何?
  • 開発者は、 のような一般的なエンコードの問題を回避するために、ユーザー入力をどうすればよいですか?この質問に簡略化が必要な場合は、意味のある答えを に入力してください。コンテンツはWebブラウザから入力されたものとします。

答えて

4

この特定の、一般的なエンコーディングの問題の原因は何?

これは、文字とバイトの間の変換が間違った文字セットを使って行われた場合に発生します。コンピュータはデータをバイトとして扱いますが、データを人間に分かりやすく表現するためには、文字(文字列)に変換する必要があります。この変換は、多くの異なる文字セットがある文字セットに基づいて行われます。

特に、’の例では、これはUTF-8を使用して読み取られたUnicode Character 'RIGHT SINQLE QUOTATION MARK' (U+2019)の典型的なCP1252表現です。 UTF-8では、その文字はバイト0xE2,0x80および0x99のものです。 CP1252 codepage layoutをチェックすると、それらのバイトが正確にâ,という文字を表すことがわかります。

これは(それは、このためのCP1252を使用している必要があります)、正しく元のソースに読んでないウェブサイトが原因で発生することができ、またはContent-Typeレスポンスヘッダ(または属性に間違ったcharset=CP1252属性でUTF-8のページが表示されていますWindowsマシンでは、CP1252のデフォルトの文字セットが使用されます)。開発者として


、私はこの1つのような一般的なエンコーディングの問題を回避するために、ユーザの入力に何をすべきでしょうか?この質問に意味のある回答を提供するために簡略化が必要な場合は、コンテンツがWebブラウザを介して入力されていると想定します。

は、あなたが任意のバイトストリームソースから文字を読んでいることを確認します(例えば、ファイル、URL、ネットワークソケットなど)知られており、predefinied文字セットを使用しました。 Unicode文字セット、好ましくはUTF-8を使用して、一貫して格納、書き込み、送信していることを確認してください。

Javaに精通している場合(あなたの質問履歴でこれが確認されています)、this articleが便利です。

関連する問題