バイト配列にASCII以外の文字が含まれている場合、文字列は作成されますか?
String s = new String(byte[] b)
個々のバイトを ASCII 文字として解釈すると、32 未満および 126 を超える値は簡単に拒否されます。
public static boolean isPrintableAscii(byte value)
{
return (value > 32 ) && (value < 127);
}
public static String readableText(byte[] buffer, int offset, int bufferSize)
{
StringBuilder builder = new StringBuilder();
for( int index = 0; index < bufferSize; ++index)
{
byte current = buffer[offset+index];
if( isPrintableAscii(current))
{
builder.append((char)current);
}
else
{
builder.append('.');
}
}
return builder.toString();
}
印刷できないバイトに遭遇したときは、「.」を印刷するだけです。長い間、16 進ダンプ ユーティリティで使用されていました。
new String (byte[] data, String charsetName)
2番目のパラメーターを次のように渡すことを使用できますUS-ASCII
いいえ、失敗しません。ただし、文字列内の非ASCII文字を検出して削除する方法があります。ただし、非ASCII文字を含む文字列はまったく問題ありません。