【发布时间】:2019-07-16 16:26:37
【问题描述】:
如何检查字符串是否可以用给定的字符集正确编码(不丢失信息)?
显而易见的方法是转换为目标编码,解码回来并进行比较。有没有更聪明的方法?
P.S. 实际应用是对大型文本文件使用 8 位编码,过滤掉给定字符集无法编码的字符串。 (如果需要,它们可以保存在单独的 UTF-8 文件中)。
简单的解决方案:
import java.nio.charset.Charset;
public class NaiveCharsetValidatation {
public static void main(String[] args) {
Charset targetCharset = Charset.forName("iso-8859-1");
byte[] bytes = "ภาษาไทย".getBytes(targetCharset);
String decodedString = new String(bytes, targetCharset);
System.out.println(decodedString); // outputs ???????
}
}
【问题讨论】:
-
@JonK 请检查解决方案(添加到原帖中)。
-
@JonK,他的建议可以正常工作(即使他正在寻找更快的东西)。当您第一次转换为目标编码时,在该编码中没有表示的任何字符都将丢失或变成某种缺失字符标记(如“?”或 �)。之后转换回原始编码时,字符串肯定不会再匹配了。
标签: java encoding character-encoding