0

我在阅读 Java 中的国际字符时遇到问题。

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

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

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 () M V”,这会在我的程序中进一步导致错误。

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

有没有人有任何想法?我花了最后一个小时在互联网上搜索,但没有找到任何答案。提前谢谢大家。

4

2 回答 2

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));
    }
}
于 2012-10-19T16:38:17.587 回答
1

您需要使用Charset.defaultCharset().name()else确保默认字符集

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
于 2012-10-19T16:39:11.690 回答