2012-04-12 10 views
1

私のアプリケーションはユーザーからの入力を受け取ります。アジア人のユーザの中には、ラテン系の文字でテキストを入力するものの、Unicodeの範囲U + FF01-FF5Eでエンコードするものもあります。 この入力文字列をASCIIの何かと比較しようとすると、期待通りに等しくありません。ここでCJKラテン文字の半角英数字をJavaのASCIIに変換する

文字についてWikipediaの記事は、私はASCII同等にその範囲から文字を変換するにはどうすればよいhttp://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms

の範囲は?

助けてください。

答えて

2

これらはあなたが変換する必要がありだけ文字がある場合は、使用できます。

String convertLatinLikeToAscii(String text) { 
    char[] chars = text.toCharArray(); 
    for (int i = 0; i < chars.length; i++) { 
     char c = chars[i]; 
     if (c >= 0xff01 && c <= 0xff5e) { 
      // Map U+FF01 to U+0021 etc 
      chars[i] = (char) (c - (0xff01 - 0x21)); 
     } 
    } 
    return new String(chars); 
} 
+0

私はそれが可能であるかどうかわからないんだけど、左のバイトは手段1ビットで始まる起こしますUTF-16は、より多くのバイトが来ることを示します。それとも私は何かが恋しい? –

+1

@MartijnCourteaux:いいえ、私はUTF-16がそうであるとは思わない。 Unicodeコードポイントが複数のUTF-16コードユニットを使用する唯一のケースは、サロゲートペアIIRCです。おそらくあなたはUTF-8を考えていました。設定されているバイトの最上位ビット*は、コードユニットを形成するために必要なバイト数が増えることを意味しますか? UTF-16コード単位は常に* 2バイトです。 (1つのコードポイントに対して2つのコードユニットが必要であるという点で可変長ですが、各コードのサイズ*は固定されています) –

+0

UTF-16はまったく同じように動作しましたが、 、 そうですか。再度、感謝します! :) UTF-16のデザインは、私が思ったよりスマートです。 –

関連する問題