Java-从文本文件打印unicode不会';t输出相应的UTF-8字符
我有一个包含大量Unicode的文本文件,并试图在控制台中打印相应的UTF-8字符,但它只打印十六进制字符串。例如,如果我复制任何值并将其粘贴到System.out中,它可以正常工作,但在从文本文件中读取它们时则不行 以下是我读取文件的代码,其中包含打印到控制台的\u00C0、\u00C1、\u00C2、\u00C3等值行,而不是我想要的值Java-从文本文件打印unicode不会';t输出相应的UTF-8字符,java,file,parsing,utf-8,path,Java,File,Parsing,Utf 8,Path,我有一个包含大量Unicode的文本文件,并试图在控制台中打印相应的UTF-8字符,但它只打印十六进制字符串。例如,如果我复制任何值并将其粘贴到System.out中,它可以正常工作,但在从文本文件中读取它们时则不行 以下是我读取文件的代码,其中包含打印到控制台的\u00C0、\u00C1、\u00C2、\u00C3等值行,而不是我想要的值 private void printFileContents() throws IOException { Path encoding = Path
private void printFileContents() throws IOException {
Path encoding = Paths.get("unicode.txt");
try (Stream<String> stream = Files.lines(encoding)) {
stream.forEach(v -> { System.out.println(v); });
} catch (IOException e) {
e.printStackTrace();
}
}
您需要将字符串从unicode编码字符串转换为UTF-8编码字符串。您可以按照以下步骤操作:1.使用myString.getBytes(“UTF-8”)将字符串转换为字节数组;2.使用新字符串(byteArray,“UTF-8”)获取UTF-8编码的字符串。代码块需要用try/catch来包围,以防出现不受支持的编码异常。多亏了OTM上面的评论,我才能够得到一个有效的解决方案。获取unicode字符串,使用Integer.parseInt()将其转换为十六进制,最后转换为char以获得实际值。此解决方案基于OTM提供的此帖子-
private void printFileContents()引发IOException{
路径编码=Path.get(“unicode.txt”);
try(Stream=Files.lines(编码)){
stream.forEach(v->
{
字符串输出=”;
//接受unicode数字并转换为十六进制值
int parse=Integer.parseInt(v,16);
//获取十六进制值的实际值
输出+=(字符)解析;
系统输出打印项次(输出);
});
}捕获(IOE异常){
e、 printStackTrace();
}
}
您是否刚刚在文件中写入了\u00C2
等内容?请给我们看文本文件的一部分文本文件如下所示\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4'很抱歉,这不是正确的打印方式。基本上,这些值都在单独的一行上。在原始帖子中添加了更多内容。仍然不起作用。现在,我的方法如下所示Path encoding=Path.get(“unicode.txt”);System.out.println(“\u00D9\u00FC\u00C2\u00C7 Acme,Inc.”);try(Stream-Stream=Files.lines(encoding)){Stream.forEach(v->{try{byte[]bytes=v.getBytes(“UTF-8”);String str=new String(bytes,“UTF-8”);System.out.println(str);}catch(不支持的编码异常e){e.printStackTrace();}
code在注释中打印不好。我在这篇文章中包含了另一个系统输出,第一个系统输出了我想要的正确字符。在你文章中的原始代码中,你可以尝试使用stream.forEach(system.out::println)吗我本来就是这样的,结果也是一样的。好吧,那你可能想看看这篇文章的答案。
private void parseGermanEncoding() {
try
{
File encoding = new File("encoding.html");
Document document = Jsoup.parse(encoding, "UTF-8", "http://example.com/");
Element table = document.getElementsByClass("codetable").first();
Path f = Paths.get("unicode.txt");
try (BufferedWriter wr = new BufferedWriter(new FileWriter(f.toFile())))
{
for (Element row : table.select("tr"))
{
Elements tds = row.select("td");
String unicode = tds.get(0).text();
if (unicode.startsWith("U+"))
{
unicode = unicode.substring(2);
}
wr.write("\\u" + unicode);
wr.newLine();
}
wr.flush();
wr.close();
}
} catch (IOException e)
{
e.printStackTrace();
}
}
private void printFileContents() throws IOException {
Path encoding = Paths.get("unicode.txt");
try (Stream<String> stream = Files.lines(encoding)) {
stream.forEach(v ->
{
String output = "";
// Takes unicode digits and converts to HEX value
int parse = Integer.parseInt(v, 16);
// Get the actual value of the hex value
output += (char) parse;
System.out.println(output);
});
} catch (IOException e) {
e.printStackTrace();
}
}