2010-12-16 24 views
2


今はUTF-8で少し失われています。
私はマルチバイトの安全という用語の正確な定義を探しています。「マルチバイトセーフ」という用語を定義してください。

+0

シングルバイト文字を表すために使用されるバイト数は128よりすなわち以下、常に7ビットであり、マルチバイト文字を表すために使用されるバイトは常に8ビットであり、すなわち、最上位を有しますつまり、127より大きい。したがって、バイトが128より小さい場合、UTF-8のマルチバイト・セーフになります。他のエンコーディングは、マルチバイト・セーフに対して異なる最大値を持つことがあります。 – Matt

答えて

4

ユニコード文字を扱うとき、すべての文字がただ1バイトまたはchar(java)を取ると仮定するのは安全ではありません。したがって、文字列を読み込んだり解析したりするときは、これを考慮する必要があります。

ここには、Unicode w.r.t Javaを扱うときの複雑さを説明するexcellent articleがあります。

  1. ストアド文字はバイトの一貫性のない数を取ることができます。 UTF-8 エンコードされた文字は、 (LATIN_CAPITAL_LETTER_A)と (MATHEMATICAL_FRAKTUR_CAPITAL_G) バイトの4つを取ります。可変幅エンコーディングは、バイト配列からの読み出しと のデコードのために、 の意味を持ちます。

  2. すべてのコードポイントをcharに格納できるわけではありません。 MATHEMATICAL_FRAKTUR_CAPITAL_Gの例 は、補助範囲の にあり、16 ビットには格納できません。これは2つの 連続char値で表されなければならず、 のいずれも単独では意味がありません。 Characterクラスは、 の32ビットコードポイントを操作するためのメソッドを提供します。

// Unicode code point to char array 
    char[] math_fraktur_cap_g = Character.toChars(0x1D50A); 
関連する問題