我在阅读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没有正确读取这些字符。
有没有人有任何想法?我花了最后一小时搜索互联网并没有找到任何答案。在此先感谢大家。
答案 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