如何知道文件中有哪个特殊字符?

时间:2010-04-21 13:23:24

标签: java encoding utf-8 character-encoding

我的应用需要在批处理过程中处理文本文件。偶尔我收到一个文件末尾有一些特殊字符的文件。我不确定那个特殊的角色是什么。无论如何我能找到那个角色是什么,以便我可以告诉正在制作该文件的其他团队。

我使用了mozilla的库来猜测文件编码,它说的是UTF-8。

3 个答案:

答案 0 :(得分:4)

首先,如果角色真的“特殊”取决于你所谓的“特殊角色”。作为Unix和OS X的旁注,您可以使用例如 od file hexdump 命令来轻松检查文件:

... $  hexdump -C example.txt 
00000530  6f 77 73 20 61 63 74 69  6f 6e 2e 0a 0a 0a 0a     |ows action.....|

现在,如果你知道你的文件编码是UTF-8,那就意味着每个字节的最高位设置为零只对应一个字符(在上面的例子中,最后一个字节是'0a',这意味着' 0a'字节对应于一个“字符”)。

UTF-8中的文件也意味着最高位设置为1的每个字节都是多字节字符的一部分。例如,在以下字节序列中:

75 20 5b e2 80 a6 5d 20  61 75 74 6f 72 69 73 61

设置最高位的唯一三个字节是“e2 80 a6”(从0x80到0xFF的所有值都设置了最左边/最高位)并且它们是同一个字符的一部分(你不能有非UTF-8中的-ASCII字符只由一个字节组成,其中最高位被设置,因此您知道这三个字节是同一字符的一部分......每个UTF-8字节的最左/最高位被设置的事实是恕我直言,这是UTF-8真正的美丽特征。

现在你谷歌在“e2 80 a6”上,你看到它是名为“水平省略号”的Unicode字符(其代码点,以UTF-8表示,由十六进制e280a6表示)。

所以基本上你必须做两件事:

  • 找出哪个字节组成了最后一个“特殊”字符(它只是一个字节还是几个字节?)

  • 找到这个/这些字节对应的“特殊字符”

答案 1 :(得分:1)

任何十六进制编辑器都应该允许您查看文件中的每个字节。这应该让你告诉他们这是什么性格。

以下是我过去使用的一个:http://www.hexworkshop.com/

答案 2 :(得分:1)

在Unix上,您可以使用od实用程序在文件或流中输出字节数据的多种表示。