6

リクエスト本文を読み取って、入力ストリームに入れています。デコード方法を明示的に言っていますが、文字列の後にまだ多くの\ u0000(Null)があります。

InputStream is = exchange.getRequestBody();
byte[] header = new byte[100];
is.read(header);
String s = new String(header, "UTF-8");

標準のJavaライブラリでこれを回避するにはどうすればよいですか?サードパーティのライブラリを使用できません。

4

4 に答える 4

4

is.read(header); 実際に読み取られたバイト数を返します。コードを次のように変更します

byte[] header = new byte[100];
int n = is.read(header);
String s = new String(header, 0, n, "UTF-8");
于 2012-12-19T09:22:04.380 に答える
1

で使用BufferedReaderしてみてくださいInputStreamReader。つまり

InputStreamReader isr = new InputStreamReader(is, "UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = br.readLine();
于 2012-12-19T09:17:28.893 に答える
0

バッファリングされたリーダーを使用して、1行ずつ読み取ります。

InputStream is = exchange.getRequestBody();
BufferedReader reader = new BufferedReader(new InputStreamReader(is))
String line;
while((line = reader.readLine()) != null)
{
    // do work
}
于 2012-12-19T09:18:02.290 に答える
0

の値をline.toCharArray()見ると、null(別名'\u0000')文字が表示されていることがわかります。これらを取り除くための回避策は、ifステートメントを使用して'\u0000'文字を除外することにより、必要な文字のみを別の配列に追加することです。それで:

public String removeNullChars(String line) {
    String result = "";

    // Convert to char array.
    char[] chars = line.toCharArray();

    // Add only chars that are not equal to '\u0000' to result
    for (int i = 0; i < chars.length; i++) {
        if (chars[i] != '\u0000') {
            result += chars[i];
        }
    }

    return result;
}
于 2015-02-22T21:28:38.833 に答える