2

次のメソッドで文字列を返す前に、コンテンツをutf-8文字セットに変換したいと思います。

public static String getContentResult(URL url) throws IOException{
    InputStream in = url.openStream();
    StringBuilder sb = new StringBuilder();

    byte [] buffer = new byte[4096];

    while(true){
        int byteRead = in.read(buffer);
        if(byteRead == -1)
            break;
        for(int i = 0; i < byteRead; i++){
            sb.append((char)buffer[i]);
        }
    }
    in.close();
    return sb.toString();
}

どうやってやるの?

ありがとう!

4

3 に答える 3

3

UTF-8に変換たくありません。入ってくるデータのストリームをUTF-8として解釈したい(私は信じています) 。

オプション:

  • InputStreamReader着信ストリームのラッピングを作成し、 UTF-8を指定して、一度に文字のブロックを読み取り、に追加します。StringBuilder

    StringBuilder builder = new StringBuilder();
    char[] buffer = new char[4096];
    InputStreamReader reader = new InputStreamReader(in, "UTF-8");
    int charsRead;
    while ((charsRead = reader.read(buffer)) != -1) {
        builder.append(buffer, 0, charsRead);
    }
    
  • Guavaを使用してデータ全体をバイト配列として読み取り、一度に変換します。

    byte[] data = BytesStreams.toByteArray(in);
    return new String(data, Charsets.UTF_8);
    

いずれの場合finallyも、例外がスローされた場合でもストリームを閉じることができるように、ブロックを使用してストリームを閉じる必要があります。

于 2012-11-28T10:07:58.140 に答える
0

文字列からバイト[]に変換:

String s = "some text here";
byte[] b = s.getBytes("UTF-8");

byte []からStringに変換します:

byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, "US-ASCII");
于 2012-11-28T10:06:59.730 に答える
-1

実際のバイト値を追加する場合は、「US-ASCII」を使用せず、そのパラメータをオフのままにします。

byte[] abcd={'A','B','C','D',13,10,'E','F',(byte)255,'G','H',13,10,'J','K',0,'L','M'};
String s = new String(abcd);
StringBuilder sabcd=new StringBuilder();

sabcd.append(s);
System.out.println(sabcd);
for(int i=0;i<sabcd.length();i++) {
    char c=sabcd.charAt(i);
    System.out.println((int)c);
}

結果:

ABCD
EFÿGH
JK
65
66
67
68
13
10
69
70
255
71
72
13
10
74
75
0
76
77
于 2018-04-20T18:47:42.120 に答える