2010-02-14 76 views
5

我有一个ANSI编码的文件。但是它里面显示阿拉伯文字母。这个文本文件是由一些程序生成的(我没有任何信息),但似乎有一些内部编码(如果我可以说,如果可能的话)阿拉伯字母出现。如何让一个文本文件有多个编码?

是否有这样的事情吗?如果不是,ANSI文件如何显示阿拉伯文字母?

*如果可能的话在Java代码中


版解释01

当我在记事本打开它++则说明该网页的编码是ANSI。请检查你的照片:

http://www.4shared.com/file/221862075/e8705951/text-Windows.html


版02

你可以从检查文件:

http://www.4shared.com/file/221853641/3fa1af8c/data.html

+1

你有访问linux吗?如果是这样,'file'命令是什么意思? – 2010-02-14 12:17:04

+0

不,我无法访问linux ...如果你想做,并希望提供帮助,请从我在02版提供的链接下载我的文件,并让我知道你得到了什么。感谢你的合作。 – 2010-02-14 12:23:38

+1

@João'file'在这个文件上产生BS。 :-( – 2010-02-14 12:30:54

回答

3

我尝试打开该文件在两个Firefox和Opera。我必须将字符编码设置为阿拉伯语Windows-1256才能在两个浏览器中正确显示,所以文件的编码最可能是这样。

注: 我最初发布这个作为一个评论,但被要求让一个答案。

+0

再次感谢...您的简单测试(我从来没有想过)为我的问题找到了解决方案,浪费了我8个小时的时间。 谢谢100000000次:) – 2010-02-14 12:46:12

+1

+1:为使用浏览器:)(和正确) – 2010-02-14 12:47:14

4

你怎么知道它的ANSI编码?如果它不是像UTF-8这样的多字节编码,那么我的猜测就是使用像这样的阿拉伯文编码页编码:Windows-1256

您可以在十六进制编辑器中查看该文件,找出阿拉伯字符所具有的数字,并以这种方式试图找出它所创建的编码/代码页。

+1

是的,就是那个。 – 2010-02-14 12:44:46

4

简短回答:可能,您的文本文件不是“ANSI”编码的,而是UTF-8。

龙回答

首先,术语 “ANSI”(在Windows上)并不意味着一个固定的编码;它的含义取决于你的语言设置。例如,在西欧和美国,它通常是Windows-1252ISO/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)字符之外的字符。

要查看该文件实际上是在十六进制编辑器打开它:

  • 如果前两个字节是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)。
+0

有趣的信息!谢谢:) – 2010-02-14 14:01:18

4

是否有这样的事情吗?

如果没有,怎么能ANSI文件显示阿拉伯语的信吗?

这不是Windows-ANSI编码的文件。更可能的是,它采用了variable-width encoding,最有可能的UTF-8:UTF-8等同于它们在US-ASCII位置许多常见的字符位置(实际上,它是这样设计的),并由此推断也为Windows的ANSI。

编辑:我们要感谢微软这种混乱。对于编码,“ANSI”没有很好的规定。通常,它意味着代码为Windows默认编码,代码页1252(“Windows-1252”),这恰好对应于来自拉丁文的“Western”字母。然而,在其他国家,Windows所使用的默认编码(在较早的Windows版本中...现在,默认是UTF-8)是而不是 Windows-1252,而是一种不同的编码,它也被称为“ANSI ”。在这种情况下,代码页1256

+0

请检查此照片:http://www.4shared.com/file/221862075/e8705951/text-Windows.html – 2010-02-14 12:16:19

+1

@MAK:用十六进制编辑器检查它。在任何情况下,Notepad ++都必须对你说谎。 – 2010-02-14 12:17:34

+0

对十六进制编辑器的任何建议? Mac支持是首选。 – 2010-02-14 12:21:16

1

ANSI字符编码允许217个字符,并且不包含阿拉伯字母。我想也许该文件使用另一种编码。

为了解决您的编辑问题,问题出现在Notepad ++中,因为显示内容明显超出了ANSI字符集的功能。

+1

你如何达到217个字符?这些是可打印的字符吗? – 2010-02-14 12:15:26

+1

是的,它们是可打印的。我想有更多不可打印的。 – spender 2010-02-14 12:19:08

+1

文件很可能是UTF-8,但代码页的可能性如何?在UTF-8之前,在计算机上有*非英文字符。 – 2010-02-14 12:40:43

1

首先我下载了​​你的文件,并试图使用vim来检查它的编码,它似乎并不知道,并且在第二台机器上它说latin1可能类似于记事本++(给出了通用答案)中发生的事情。
所以我也file data.txt和输出是这样的:

data.txt: ISO-8859 text, with CRLF line terminators 

希望这会有所帮助。

编辑
使用浏览器的事情表明,这个答案是不正确。

ISO-8859-4和ISO-8859-13可以显示文本,没有错误,但是不含阿拉伯文的字符。

相关问题