Java-从文本文件打印unicode不会';t输出相应的UTF-8字符

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

我有一个包含大量Unicode的文本文件,并试图在控制台中打印相应的UTF-8字符,但它只打印十六进制字符串。例如,如果我复制任何值并将其粘贴到System.out中,它可以正常工作,但在从文本文件中读取它们时则不行

以下是我读取文件的代码,其中包含打印到控制台的\u00C0、\u00C1、\u00C2、\u00C3等值行,而不是我想要的值

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();
    }
}