ちょうど先日、奇妙な奇妙なバグに遭遇しました。構築しなければならない文字列がありました。そして、区切り文字として、ホストシステムと通信していた char 254 を使用していました。とにかく、文字列を作成してホストに送信しました。ホストでは、区切り文字として char 222 を受け取りました! 頭をかきむしり、深く調べてみると、それは奇妙に思えた
16 進数: FE、2 進数: 11111110
に変わっていた
16 進数: DE、2 進数: 11011110
Locale.getDefault() と Locale.ENGLISH を試してみましたが、役に立ちませんでした。
String.toUpperCase の実装には、特定のハードコードされたものを除くすべての文字のマスクがあるのでしょうか?
今のところ、問題を回避するために次を使用しています。
public static String toUpperCase(String input) {
char[] chars = input.toCharArray();
for(int i = 0; i < chars.length; ++i ) {
if( chars[i] > 96 && chars[i] < 123 ) {
chars[i] &= 223;
}
}
return new String(chars);
}
私の質問は、何かが足りないのですか?私が気付いていないより良い方法はありますか?本当にありがとう!