确定字符串中的字符是否都属于特定的字符集

22

我需要能够在Java中接收一个字符串并确定其中的所有字符是否属于指定字符集(例如ISO-8859-1)。我已经搜索了很多方法来实现这个功能(包括使用CharsetDecoder进行尝试),但还没有找到合适的方法。

最佳方式是什么,可以检查一个字符串中的所有字符是否属于给定的字符集?

2个回答

32

1
太棒了!这似乎正好符合我的需求,而且非常干净和简单。现在我感到有点傻,因为在查看相反的类(“CharsetDecoder”)花费了所有这些时间之后才来询问。谢谢! - Michael
仅供参考,我基本上做了这样的事情: Charset.forName(CharEncoding.ISO_8859_1).newEncoder().canEncode("string") - Michael
1
我知道这篇文章很旧,但它是我搜索结果中的第一个。想要确定一个字符串是否编码在 IBM EBCDIC 字符集之一中,如 IBM-1047,请使用 "Cp1047"。对于 IBM-737,请使用 "Cp737"。参考 Java 7 文档: https://docs.oracle.com/javase/7/docs/technotes/guides/intl/encoding.doc.html - John Czukkermann

2

我认为最简单的方法是有一个表格,列出可以在目标字符集编码中表示的Unicode字符,然后测试字符串中的每个字符。对于ISO-8859系列,该表格通常可以由一到几个Unicode字符范围表示,使得测试相对容易。这需要很多手工操作,但只需要完成一次。

编辑: 或者使用Aubin的答案(如果您的Java实现支持该字符集)。 :)


@Aubin - 干杯。当然,你的解决方案只有在Java实现支持目标CharSet时才有效。(对于ISO-8859-1和其他标准字符集没有问题,但通常不支持其他ISO-8859编码。) - Ted Hopp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接