Java:关于字符集转换的建议
我一直在研究一个实现以下功能的场景:Java:关于字符集转换的建议,java,character-encoding,data-conversion,Java,Character Encoding,Data Conversion,我一直在研究一个实现以下功能的场景: 获取Unicode格式的输入数据;[UTF-8] 转换为ISO-8559 检测并替换不支持的编码字符;[基于用户定义的键值对] 我的问题是,我一直在试图深入查找有关ISO-8559的信息,但运气不佳。有人知道更多关于这件事吗?这个和ISO-8859有什么不同?任何细节都会很有帮助 第二,撇开ISO-8559要求不谈,我继续编写程序,用Java将传入数据转换为ISO-8859。虽然我能够使用基于字符的替换来实现所需的功能,但当数据量很大时,这显然似乎很耗时。[
我相信一定有更好的办法。有人能告诉我吗?我想你想把UTF-8转换成ISO-8859-1,也就是西方拉丁语-1。网络中有许多字符集表
newoutputstreamwriter(newfileoutputstream(“…”,“Windows-1252”)
这样的Java标准转换已经做了很多。您可以编写一种筛选器,也可以查找引入的?
未翻译的特殊字符。您可以将带有Windows-1252以外重音的拉丁字母翻译为ASCII字母:
String s = ...
s = Normalizer.normalize(s, Normalizer.Form.NFD);
return s = s.replaceAll("\\p{InCombiningDiacriticalMarks}", "");
似乎与另一个领域有关。似乎如此。我发现了更多关于ISO-8559@Srii的信息:不,这是一个简单(但非常一致!)的打字错误。我敢肯定,给你这个任务的人也犯了错误。ISO-8559与字符集无关,而ISO-8859是该领域非常常见的规范。我敢打赌他们的意思是ISO-8859。第二个链接似乎在谈论8859。是因为法国的数字系统吗?哈我怀疑OP正在谈论它的
ISO-8859-1
,多亏了Joop,normalizer类似乎替换了所有的双字符标记,而我只想根据链接到程序的属性文件替换一组少数字符。由于翻译失败而产生的问号成为一个通用符号,因此包含要替换的值-&-要替换的值的属性文件将无效。例如:如果数据包含SÄSöSÄSöS,则转换结果可能如下:S?S?S?S?S。属性文件中定义的等式,Ä=A&ö=o实现变得几乎困难。也许我错了,但我很高兴被纠正。+1从欧洲的角度来看:ISO-8859-1
最大的缺点是它不包含€
符号。但是Windows-1252
有。@FabianBarney:ISO-8859-15也有。我没有想到实际的代码,因为它很棘手。首先替换“?”,然后翻译;其中显示“?”,查找原始字符,并将其替换为ASCII版本并恢复原始问号。这将在ç
(拉丁语-1)中留下,而不是ĉ
(拉丁语-3,UTF-8)。@JoachimSauer提到ISO-8859-15是一个很好的观点。尽管带有ISO-8859-15的HTML页面不会显示Windows-1252的128-159范围,而ISO-8859-1将(非法)显示该范围。比如逗号式的引号。