有没有其他方法可以知道java String是否包含UTF-8编码的character-encoding,例如阿拉伯语单词。
我试过这段代码:但它是否准确,并使工作呢?
char c = 'أ';
int num = (int) c;
if(num> 128)
// then UTF-8 characters exists 发布于 2012-03-22 23:38:24
(假设UTF-8 ==非ASCII码)
你可以做的是在ASCII中对字符串进行编码,然后解码,并将结果与原始结果进行比较。如果它们不相等,则存在非ASCII字符。
但是,您自己的示例也可以(几乎应该是>= 128的),因为以下证明确实所有char的< 128都是ASCII码:
为实现向后兼容,为128个ASCII和256个ISO-8859-1 (拉丁1)字符指定了与其在早期标准中的代码相同的Unicode/UCS码。
第一个平面(代码点U+0000到U+FFFF)包含最常用的字符,称为基本多语言平面或
。UTF-16和UCS-2都将此范围内的有效码点编码为数字上等于相应码点的单个16位码位单元。
("UTF-16“和"ASCII",维基百科)
和chars是UTF-16“代码单元”。
但是,从整个问题来看,您最好先阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。
发布于 2012-03-22 23:54:33
我不相信有一个确定的方法可以100%准确地知道。UTF-8和UTF-16可以附带一个可选的Byte Order Mark,您可以检测到该UTF。不能保证它会在那里,但很多工具都包含了它们,特别是对于UTF-16,因为它更重要。
Apache Commons IO包含一个方便的BOMInputStream class,用于读取带BOM标记的流,使用起来很简单:
BOMInputStream bomIn = new BOMInputStream(in);
if (bomIn.hasBOM()) {
// has a UTF-8 BOM
}https://stackoverflow.com/questions/9825579
复制相似问题