Java在流中丢失了国际字符

时间:2012-10-19 16:35:42

标签: java character-encoding

我在阅读Java中的国际字符时遇到了麻烦。

使用的默认字符集是UTF-8,我的Eclipse工作区也设置为此。

我正在阅读互联网视频的标题(实际上是Gangam风格;)),其中包含韩文字符,我这样做如下:

BufferedReader stdIn = new BufferedReader(new InputStreamReader(shellCommand.getInputStream()));
String fileName = null, output = null;
while ((output = stdInput.readLine()) != null) {
if (output.indexOf("Destination") > 0) {
    System.out.println(output);

我知道它将会读到的标题是:“PSY - GANGNAM STYLE(강남스타일)M / V”,但是控制台显示以下内容:“PSY - GANGNAM STYLE()MV”,它会导致错误进一步发生我的计划。

似乎InputStream Reader没有正确读取这些字符。

有没有人有任何想法?我花了最后一小时搜索互联网并没有找到任何答案。在此先感谢大家。

2 个答案:

答案 0 :(得分:2)

  

使用的默认字符集是UTF-8

默认在哪里?在Java本身,还是在视频中?如果您明确指定了它,那将是很多更清晰。你应该检查视频数据是否正确。

  

似乎InputStream Reader没有正确读取这些字符。

嗯,我们所知道的是文本在控制台上没有正确显示。 要么没有正确读取,它没有正确显示。您应该打印出每个字符的Unicode值,以便检查字符串的确切内容。例如:

static void logCharacters(String text) {
    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);
        System.out.println(c + " " + Integer.toHexString(c));
    }
}

答案 1 :(得分:1)

您需要使用Charset.defaultCharset().name()确认默认字符集,否则请使用

InputStreamReader in = new InputStreamReader(shellCommand.getInputStream(), "UTF-8");

我尝试了示例程序,它在eclipse中正确打印。正如AlexR指出的那样,它可能是Windows控制台的问题。

byte[] bytes = "PSY - GANGNAM STYLE (강남스타일) M/V".getBytes();
    InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(bytes));
    BufferedReader bufferedReader = new BufferedReader(reader);
    String str = bufferedReader.readLine();
    System.out.println(str);

输出:

 PSY - GANGNAM STYLE (강남스타일) M/V