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

我需要能够在Java中获取一个字符串,并确定其中包含的所有字符是否都在指定的字符集中(例如ISO-8859-1)。 我已经四处寻找一个简单的方法(包括使用CharsetDecoder ),但还没有能够找到一些东西。

获取字符串并确定所有字符是否在给定字符集中的最佳方法是什么?

包java.nio.charset中的类CharsetEncoder提供了一个方法canEncode来测试是否支持特定字符。

迈克尔基本上做了这样的事:

CharsetforNameCharEncoding.ISO_8859_1 )。 newEncoder ()。 canEncode (“string”)

请注意, CharEncoding.ISO_8859_1依赖于Apache commons ,可能会被“ISO_8859_1”取代。

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

编辑:或者如果Java实现支持charset,请使用Aubin的答案 。 🙂