首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解java字符串中包含的文本是否包含UTF-8编码字符的最佳方法

了解java字符串中包含的文本是否包含UTF-8编码字符的最佳方法
EN

Stack Overflow用户
提问于 2012-03-22 23:35:17
回答 2查看 2.1K关注 0票数 4

有没有其他方法可以知道java String是否包含UTF-8编码的character-encoding,例如阿拉伯语单词。

我试过这段代码:但它是否准确,并使工作呢?

代码语言:javascript
复制
char c = 'أ';
int num = (int) c;

if(num> 128)
// then UTF-8 characters exists 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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!)

票数 2
EN

Stack Overflow用户

发布于 2012-03-22 23:54:33

我不相信有一个确定的方法可以100%准确地知道。UTF-8和UTF-16可以附带一个可选的Byte Order Mark,您可以检测到该UTF。不能保证它会在那里,但很多工具都包含了它们,特别是对于UTF-16,因为它更重要。

Apache Commons IO包含一个方便的BOMInputStream class,用于读取带BOM标记的流,使用起来很简单:

代码语言:javascript
复制
BOMInputStream bomIn = new BOMInputStream(in);
if (bomIn.hasBOM()) {
    // has a UTF-8 BOM
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9825579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档