Java 如何检测文本文件是否使用Windows-1256编码?

Java 如何检测文本文件是否使用Windows-1256编码?,java,unicode,character-encoding,Java,Unicode,Character Encoding,我很想知道文件是否为Windows-1256。是否有办法识别文本文件是否为Java中的Windows-1256?您可以使用此API检查编码: 看看这个问题: 将编码头添加到文件中。许多文本编辑器都这样做: # -*- coding: cp1256 -*- 除此之外,没有可靠的方法可以做到这一点 问题是cp12xx编码彼此之间并没有太大差异。它们在屏幕上看起来不同,但在文件的数据中,没有显示0x8a表示阿拉伯语ٹ1256或Š1250和1252或nothing 1255 PS:由于从右到左的问题,

我很想知道文件是否为Windows-1256。是否有办法识别文本文件是否为Java中的Windows-1256?

您可以使用此API检查编码:

看看这个问题:


将编码头添加到文件中。许多文本编辑器都这样做:

# -*- coding: cp1256 -*-
除此之外,没有可靠的方法可以做到这一点

问题是cp12xx编码彼此之间并没有太大差异。它们在屏幕上看起来不同,但在文件的数据中,没有显示0x8a表示阿拉伯语ٹ1256或Š1250和1252或nothing 1255


PS:由于从右到左的问题,最后一句看起来是错误的。代码1256实际上在阿拉伯字符之后。

假设您可以选择西欧部分地区的Windows-1256阿拉伯语、UTF-8和Windows-1252。然后,您可以为UTF-8不敏感序列和Windows-1252注册错误编码的证明。Windows-1252的某些序列无论如何都会引发UTF-8不可解析的异常-

try {
    readInUTF8(file);
} catch (IsWindows1256Exception e {
    readInWindow1256(file);
}

伪代码

通常,您只能通过在给定编码中无效的字节来检测哪些编码文本不是。e、 g.一块纯ASCII文本最初可以是任意数量的编码,尽管它是哪种编码并不重要-1 jchardet无法区分大多数cp12xx编码。仅支持1250、1251和1253。