简短回答:您的文本文件可能不是“ANSI”编码的,而是 utf-8。
长答案:
首先,术语“ANSI”(在 Windows 上)并不意味着固定编码。它的含义取决于您的语言设置。例如,在西欧和美国,它通常是Windows-1252(ISO/IEC 8859-1 的变体,也称为 latin-1),在日本,它是SHIft JIS,在阿拉伯国家,它是ISO/ IEC_8859-6。
如果您使用的是非阿拉伯语版本的 Windows 并且没有更改您的语言设置,并且当您在记事本中打开文件时可以在文件中看到阿拉伯字母,那么它肯定不是这些 ANSI 编码中的任何一种。相反,它可能是Unicode。
请注意,我不是指“UNICODE”,它在 Windows 上通常表示UTF-16LE。它也可以是 UTF-8。两者都是可以编码当前在 Unicode 中定义的所有 100.000+ 个字符的编码,但它们以不同的方式进行编码。两者都是可变长度编码,这意味着并非所有字符都使用相同的位数进行编码。
在 UTF-8 中,每个字符被编码为一到四个字节。已选择编码以使 ASCII 字符编码为一个字节。
在 UTF-16 中,每个字符都被编码为两个四个字节。这种编码最初是在 Unicode 的字符少于 64K 时发明的,因此可以将每个字符编码为单个 16 位字。后来,当明确 Unicode 必须超过 64K 限制时,发明了一种方案,其中 0xD800-0xDFFF 范围内的单词对用于表示前 64K(减去 0x800)字符之外的字符。
要查看文件中的实际内容,请在十六进制编辑器中打开它:
- 如果前两个字节是 FF FE,那么很可能是 UTF-16LE(小端序)
- 如果前两个字节是 FE FF,那么它可能是 UTF-16BE(大端,在 Windows 上不太可能)
- 如果前三个字节是 EF BB BF,那么很可能是 UTF-8
- 如果您看到很多 00 字节,则可能是 UTF-16(或 UTF-32,如果您看到成对的 00 字节)
- 如果阿拉伯字符占据一个字节,则很可能是 ISO-8859-6(例如 ش 将是 D5)。
- 如果阿拉伯字符占据多个字节,则很可能是 UTF-8(例如 ش 将是 D8 B4)。