目前我正在拼命尝试将从控制台读取的德语变音符号写入Windows 7上的utf8编码文本文件。
以下是设置扫描仪的代码:
Scanner scanner = new Scanner(System.in, "UTF8");
以下是读取字符串的代码:
String s = scanner.nextLine();
以下是写入文件的代码:
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(this.targetFile), "UTF8");
osw.write(s);
不幸的是,代替示例“überraschung”,所写的文件在utf8中编码,但不会显示变音符号。怎么办?
答案 0 :(得分:3)
您的控制台可能不是UTF-8,因此当您执行new Scanner(System.in, "UTF8");
时,您正在使用错误的编码创建扫描程序,并且当您尝试从控制台读取行时,您的变音符号会丢失。
您可能希望在控制台提示符下使用chcp
来检查正在使用的代码页。
实际上,您可能根本不需要指定编码。如果您只是将扫描程序创建为new Scanner(System.in)
,则应使用默认的平台编码。
答案 1 :(得分:2)
我遇到了类似的问题(扫描仪不会“检测到”字符串“ç”,而“Açores”会使字符串“乱码”。
我通过声明该语言的字符集来解决它:
Scanner keyboardReader = new Scanner(System.in, "iso-8859-1");
答案 2 :(得分:0)
这适用于我,德语变音符号:
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class P {
public static void main(String[] args) throws Exception {
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String s = stdin.readLine();
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/p.txt"), "UTF-8");
osw.write(s);
osw.close();
}
}