我有一个ANSI编码的文件。但是它里面显示阿拉伯字母。这个文本文件是由一些程序生成的(我没有信息),但似乎有某种内部编码(如果我可以说,如果可能的话),阿拉伯字母可以出现。
有这样的事吗?如果没有,ANSI文件如何显示阿拉伯字母?
*如果可能,请在Java代码中解释
Edition 01
当我在Notepad ++中打开它时,它显示页面编码是ANSI。请查看此照片:
http://www.4shared.com/file/221862075/e8705951/text-Windows.html
第02版
您可以从以下位置查看文件:
答案 0 :(得分:4)
你怎么知道它是ANSI编码的?如果它不是像UTF-8那样的多字节编码,我的猜测就是使用像这样的阿拉伯语代码页进行编码:Windows-1256。
您可以在十六进制编辑器中查看该文件,找出阿拉伯字符所具有的数字,并尝试找出它所创建的编码/代码页。
答案 1 :(得分:4)
简短回答:可能,您的文本文件不是“ANSI”编码的,而是utf-8。
答案很长:
首先,术语“ANSI”(在Windows上)并不意味着固定编码;它的含义取决于您的语言设置。例如,在西欧和美国,它通常是Windows-1252(ISO/IEC 8859-1, also known as latin-1的变体),在日本,SHift JIS,而在阿拉伯国家,它是ISO/IEC_8859-6
如果您使用的是非阿拉伯语版本的Windows并且没有改变您的语言设置,并且您在记事本中打开文件时可以看到文件中的阿拉伯字母,那么肯定不会出现这些ANSI编码中的任何一种。相反,它可能是Unicode。
请注意,我的意思并不是“UNICODE”,在Windows上通常意味着UTF-16LE。它也可能是UTF-8。两种编码都可以编码当前在Unicode中定义的所有100.000+个字符,但它们以不同的方式进行编码。两者都是variable length encodings,这意味着并非所有字符都使用相同的位数进行编码。
在UTF-8中,每个字符编码为一到四个字节。选择编码使得ASCII字符以一个字节编码。
在UTF-16中,每个字符编码为两个四字节。这种编码最初是在Unicode的字符少于64K时发明的,因此可以编码一个16位字中的每个字符。后来,当很明显Unicode必须超过64K限制时,发明了一种方案,其中0xD800-0xDFFF范围内的字对用于表示第一个64K(减去0x800)字符之外的字符。
要查看文件中的实际内容,请在十六进制编辑器中打开它:
答案 2 :(得分:4)
有这样的事吗?
没有
如果没有,ANSI文件如何显示阿拉伯字母?
它不是Windows-ANSI编码的文件。更可能的是,它使用variable-width encoding,很可能是UTF-8:UTF-8中的许多常见字符位置等同于它们的位置在US-ASCII中(实际上,它是按照这种方式设计的),也是对Windows-ANSI的推断。
编辑:我们要感谢微软的这种困惑。在编码方面,“ANSI”没有明确规定。通常它代表Windows默认编码,代码页1252(“Windows-1252”),恰好对应于源自拉丁语的“西方”字母。
但是,在其他国家/地区,Windows使用的默认编码(在较旧的Windows版本中......今天,默认为UTF-8)是不是 Windows-1252,而是一种不同的编码,然后是也称为“ANSI”。在这种情况下,代码页1256。
答案 3 :(得分:3)
我尝试在Firefox和Opera中打开文件。我不得不将字符编码设置为阿拉伯语Windows-1256,以使其在两个浏览器中都能正确显示,因此文件的编码最有可能是。
注意: 我最初发布此评论作为评论,但被要求作出回答。
答案 4 :(得分:1)
ANSI字符编码允许217个字符,不包含阿拉伯字母。我想也许该文件使用了替代编码。
对您的编辑进行测试,问题出现在Notepad ++上,因为显示的内容显然超出了ANSI字符集的功能。
答案 5 :(得分:1)
首先我下载了你的文件,并尝试使用vim来检查它的编码,它似乎不知道,并且在第二台机器上它说latin1
这可能类似于记事本++中发生的事情(给出了通用接听)。
所以我做了file data.txt
,输出是这样的:
data.txt: ISO-8859 text, with CRLF line terminators
希望这会有所帮助。
修改强>:
使用浏览器的东西显示这个答案是不正确的。
ISO-8859-4和ISO-8859-13可以显示文本,没有错误,但字符不在阿拉伯语中。