我尝试在屏幕上打印出包含西班牙语重音的字符串。 我用相同的输入得到不同的答案,但采用不同的方法。
我的第一种方法是通过扫描仪类
读取包含西班牙语重音的字符串 //input is a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ
Scanner sc = new Scanner(System.in);
System.out.println("Enter some spanish chars next: ");
String spanishLine = sc.nextLine();
try {
System.out.println("Output from Scanner: " + spanishLine);
System.console().writer().println(spanishLine);
} catch (Exception e) {
}
我的第二个apporche是我从这个网站找到的:http://www.rgagnon.com/javadetails/java-0046.html
String s = "a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ";
try {
System.out.println("Output from System.console: " + s);
System.console().writer().println(s);
} catch (Exception e) {
}
我的出现如下
Enter some spanish chars next:
a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ
output from Scanner: a � e � i � o � u � A � E � I � O � U � � �
output from System.console: a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ
任何人都可以解释为什么我从同一输入中得到两个不同的答案。 如何修复我的第一种方法以获得与第二种方法相同的结果?
答案 0 :(得分:3)
使用第二种方法,String的字节直接输入到app中。使用第一种方法,您依赖于扫描仪的区域设置
见 http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#useLocale(java.util.Locale)
答案 1 :(得分:1)
不是答案
你还需要检查一些事情。
java编译器使用的java源代码编码必须与文本/编辑器的编码相同。
检查默认编码:
System.out.println(System.getProperty("file.encoding"));
将System.out / console重定向到文件。
尝试真正的控制台,而不是IDE。
我觉得行为令人费解。看起来Scanner采用编码UTF-8的字符集然后必须将其写入US-ASCII,因此�
给出了可映射的字符。那不可能。它看起来像扫描仪将是"越野车" - 我怀疑。
尝试转储字符串:
for (int i = 0; i < s.length(); ) {
int cp = s.codePointAt(i);
System.out.printf(" %x", cp);
i += Character.charCount(cp);
}
System.out.println();
(通常没有完成)
System.setProperty("file.encoding","Windows-1252");