この特定の、一般的なエンコーディングの問題の原因は何?
これは、文字とバイトの間の変換が間違った文字セットを使って行われた場合に発生します。コンピュータはデータをバイトとして扱いますが、データを人間に分かりやすく表現するためには、文字(文字列)に変換する必要があります。この変換は、多くの異なる文字セットがある文字セットに基づいて行われます。
特に、’
の例では、これは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が便利です。