【发布时间】:2019-01-16 07:59:00
【问题描述】:
我认为这只是 Python 2 的问题,但现在在 java(Windows 10、JDK8)中遇到了类似的问题。
到目前为止,我的搜索几乎没有解决问题。
我从“stdin”输入流中读取了这个值:Viļāni。当我将它打印到控制台时,我得到了这个:Vi????ni。
相关代码sn-ps如下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
ArrayList<String> corpus = new ArrayList<String>();
String inputString = null;
while ((inputString = in.readLine()) != null) {
corpus.add(inputString);
}
String[] allCorpus = new String[corpus.size()];
allCorpus = corpus.toArray(allCorpus);
for (String line : allCorpus) {
System.out.println(line);
}
我的问题进一步展开如下:
我读取了一个包含以下 2 行的文件:
を
Sōten_Kōro
当我从磁盘读取它并输出到第二个文件时,我得到以下输出:
ã‚’
S�ten_K�ro
当我使用 cat testinput.txt | java UTF8Tester 从标准输入读取文件时,我得到以下输出:
???
S??ten_K??ro
显然两者都是错误的。我需要能够将正确的字符打印到控制台和文件。我的示例代码如下:
public class UTF8Tester {
public static void main(String args[]) throws Exception {
BufferedReader stdinReader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8));
String[] stdinData = readLines(stdinReader);
printToFile(stdinData, "stdin_out.txt");
BufferedReader fileReader = new BufferedReader(new FileReader("testinput.txt"));
String[] fileData = readLines(fileReader);
printToFile(fileData, "file_out.txt");
}
private static void printToFile(String[] data, String fileName)
throws FileNotFoundException, UnsupportedEncodingException {
PrintWriter writer = new PrintWriter(fileName, "UTF-8");
for (String line : data) {
writer.println(line);
}
writer.close();
}
private static String[] readLines(BufferedReader reader) throws IOException {
ArrayList<String> corpus = new ArrayList<String>();
String inputString = null;
while ((inputString = reader.readLine()) != null) {
corpus.add(inputString);
}
String[] allCorpus = new String[corpus.size()];
return corpus.toArray(allCorpus);
}
}
真的被困在这里,我们将不胜感激!提前致谢。保罗
【问题讨论】:
-
在 Eclipse、Windows 7 中运行时无法重现。您使用的控制台应用程序是否能够显示 UTF-8 字符?
-
我在 Windows 上的 VS Code 终端中使用以下命令运行它:
cat input.txt | java app
标签: java unicode utf-8 output inputstream