字符集无法读取€;(欧元符号)来自java中的dsv文件

字符集无法读取€;(欧元符号)来自java中的dsv文件,java,character-encoding,Java,Character Encoding,从dsv文件中读取欧元符号时,以下代码不起作用 CSVReader csvReader = new CSVReaderBuilder(Files.newBufferedReader(sourceFile, Charset.forName("ISO-8859-9"))).withCSVParser(csvParser).build(); 上述行中使用的字符集是否不正确 也尝试了ISO-8859-1和ISO-8859-15,但运气不佳。不要猜测。您需要找出CSV文件实际使用的编码。 因此,启动您最

从dsv文件中读取欧元符号时,以下代码不起作用

CSVReader csvReader = new CSVReaderBuilder(Files.newBufferedReader(sourceFile, Charset.forName("ISO-8859-9"))).withCSVParser(csvParser).build();
上述行中使用的
字符集是否不正确


也尝试了
ISO-8859-1
ISO-8859-15
,但运气不佳。

不要猜测。您需要找出CSV文件实际使用的编码。
因此,启动您最喜欢的十六进制编辑器或-viewer并查找
字符

  • 中,字符由十六进制
    A4
    (1字节)表示
  • 中,字符不可表示
  • 中,字符不可表示
  • 中,字符由十六进制
    E2 82 AC
    表示(3个字节)
  • 中,字符由十六进制
    80
    (1字节)表示

  • 不要猜测。您需要找出CSV文件实际使用的编码。
    因此,启动您最喜欢的十六进制编辑器或-viewer并查找
    字符

    • 中,字符由十六进制
      A4
      (1字节)表示
    • 中,字符不可表示
    • 中,字符不可表示
    • 中,字符由十六进制
      E2 82 AC
      表示(3个字节)
    • 中,字符由十六进制
      80
      (1字节)表示

    我建议尝试使用字符集
    UTF-8
    读取UTF-8中的一些编码是单字节码。这可能会有帮助。此外,还有一个实用程序可以帮助您诊断您的问题。有一个名为MgntUtils的开源java库(由我编写),它具有将任何字符串转换为unicode序列的实用程序,反之亦然。您需要做的就是:

    String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Hello world");
    
    它将返回字符串
    “\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064”


    这同样适用于任何语言中的任何字符串,包括特殊字符。这是一篇文章的链接,该文章解释了该库以及从何处获取该库(可在和上找到。在文章中搜索段落:“字符串Unicode转换器”因此,当您读取字符串时,请将其转换并查看出现了什么。请注意,欧元符号的unicide是\u20AC

    我建议尝试使用字符集
    UTF-8
    读取UTF-8中的一些编码是单字节码。这可能会有所帮助。此外,还有一个实用程序可以帮助您诊断问题lem.有一个名为MgntUtils的开源java库(由我编写),该库具有将任何字符串转换为unicode序列的实用程序,反之亦然。您需要做的只是:

    String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Hello world");
    
    它将返回字符串
    “\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064”


    这同样适用于任何语言中的任何字符串,包括特殊字符。以下是文章的链接,解释了该库以及从何处获取该库(可在和上获得)。在文章中搜索段落:“字符串Unicode转换器”因此,当您读取字符串时,请将其转换并查看出现了什么。请注意,Euro符号的unicide是\u20AC

    我们无法神奇地知道文件所在的字符集。您可以检查文件中Euro符号的字节值并尝试找出编码。您说“不工作”。它是否引发异常?某些后续程序逻辑是否异常?某些控制台中的某些输出是否与预期不同?请提供更多详细信息。请在记事本++中打开该文件,选择正确的编码,以便正确显示欧元符号,并从记事本++的状态行中告诉我们编码。我们将在上,您无法神奇地知道文件所在的字符集。您可以检查文件中欧元符号的字节值,并尝试找出编码。您可以说“不工作”。它是否引发异常?某些后续程序逻辑是否异常?某些控制台中的某些输出是否与预期不同?请提供更多详细信息。请在记事本++中打开文件,选择正确的编码,以便正确显示欧元符号,并从记事本++的状态行中告诉我们编码。您好霍马斯,谢谢你的回复。它由1个字节表示,因此在ISO-8859-15中尝试过……但无法读取欧元symbol@MelbaMartis那么到底是哪个字节呢?那么这是另一种编码。可能是ISO-8859系列的另一种,因为所有这些都是1字节编码。那么很可能是Windows-1252。这是一个完美的答案ncrete值,并在十六进制编辑器中提示。记事本++/JEdit或类似的可以使用不同的字符集。嗨,托马斯,谢谢你的回答。它由1字节表示,因此使用ISO-8859-15进行了尝试…但无法读取欧元symbol@MelbaMartis那么到底是哪个字节呢?这是另一种编码。可能是ISO-8859的另一种系列,因为所有这些都是1字节编码。最有可能是Windows-1252。一个带有具体值的完美答案,并在十六进制编辑器中提示。记事本++/JEdit或类似的可以使用不同的字符集。