通常、文字列を変換する必要がある場合は、param なしbyte[]
で使用します。getBytes()
charsetを使用する必要があるのは保存されていないことが確認されました。なぜそうすべきなのか - 文字 'A' は常に に解析され0x41
ますか? そうじゃない?
3 に答える
文字エンコーディングが異なれば、文字の解析方法も異なります。Ascii では、'A' は 0x41 に解析されます。他のエンコーディングでは、これは異なります。
このため、一部の Web ページにアクセスすると、奇妙な文字が表示されることがあります。ブラウザはそれをデコードする方法を知らないため、デフォルトにデコードするだけです。
背景: テキストがファイルに保存されるか、ソケットを介してコンピューター間で送信される場合、テキスト文字はビットのシーケンスとして保存または送信され、ほとんどの場合、8 ビット バイトにグループ化されます。文字はすべて Unicode で数値を定義しているため、'A' の値は常に 0x41 です (実際、Unicode 文字セットには、ギリシャ語とロシア語のアルファベットで他に 2 つの A がありますが、それは関係ありません)。しかし、その方法には多くのメカニズムがありますこれらの数値コードは、ファイルに保存するとき、または別のコンピューターに送信するときに、一連のビットに変換されます。UTF-8 では、0x41 は 8 ビット (バイト 0x41) として表されますが、他の数値 (コード ポイント) は、ビットを並べ替えるアルゴリズムを使用して 16 ビット以上に変換されます。UTF-16 では、0x41 は 16 ビットとして表されます。また、JIS のような他のエンコーディングや、Unicode 文字のすべてではなく一部を表現できるエンコーディングもあります。String.getBytes()
ファイルまたはソケットに送信されるバイトを含むバイト配列を返すことを意図していたため、メソッドは、それらのバイトを作成するときに使用することになっているエンコーディングを知る必要があります。基本的に、エンコードは、後でファイルを読み取るプログラム、またはソケットの反対側のコンピューターが期待するものと同じでなければなりません。