Java 如何知道文件中有哪些特殊字符?
我的应用程序需要在批处理过程中处理文本文件。有时我会收到一个文件,文件末尾有一些特殊字符。我不确定那个特殊的角色是什么。无论如何,我都可以找到那个角色,这样我就可以告诉其他制作该文件的团队Java 如何知道文件中有哪些特殊字符?,java,encoding,utf-8,character-encoding,Java,Encoding,Utf 8,Character Encoding,我的应用程序需要在批处理过程中处理文本文件。有时我会收到一个文件,文件末尾有一些特殊字符。我不确定那个特殊的角色是什么。无论如何,我都可以找到那个角色,这样我就可以告诉其他制作该文件的团队 我用mozilla的库猜测文件编码,它显示UTF-8 任何十六进制编辑器都应该允许您查看文件中的每个字节。这应该让你告诉他们这是什么性格 这里是我过去使用过的一个:在Unix上,您可以使用od实用程序在文件或流中输出字节数据的几种表示形式。首先,字符是否真的是“特殊”取决于您称之为“特殊字符”的内容。作为Un
我用mozilla的库猜测文件编码,它显示UTF-8 任何十六进制编辑器都应该允许您查看文件中的每个字节。这应该让你告诉他们这是什么性格
这里是我过去使用过的一个:在Unix上,您可以使用
od
实用程序在文件或流中输出字节数据的几种表示形式。首先,字符是否真的是“特殊”取决于您称之为“特殊字符”的内容。作为Unix和OS X上的旁注,例如,您可以使用od、file和hextump命令轻松检查文件:
... $ 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真正美丽的特征)
现在你在谷歌上搜索“e280a6”,你会发现它是一个名为“水平省略号”的Unicode字符(其代码点在UTF-8中由十六进制e280a6表示)
所以基本上你必须做两件事:
- 找出构成最后一个“特殊”字符的字节(是一个字节还是几个字节?)
- 查找此/这些字节对应的“特殊字符”