Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:关于字符集转换的建议_Java_Character Encoding_Data Conversion - Fatal编程技术网

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。虽然我能够使用基于字符的替换来实现所需的功能,但当数据量很大时,这显然似乎很耗时。[

我一直在研究一个实现以下功能的场景:

  • 获取Unicode格式的输入数据;[UTF-8]
  • 转换为ISO-8559
  • 检测并替换不支持的编码字符;[基于用户定义的键值对]
  • 我的问题是,我一直在试图深入查找有关ISO-8559的信息,但运气不佳。有人知道更多关于这件事吗?这个和ISO-8859有什么不同?任何细节都会很有帮助

    第二,撇开ISO-8559要求不谈,我继续编写程序,用Java将传入数据转换为ISO-8859。虽然我能够使用基于字符的替换来实现所需的功能,但当数据量很大时,这显然似乎很耗时。[以百万美元计]


    我相信一定有更好的办法。有人能告诉我吗?

    我想你想把UTF-8转换成ISO-8859-1,也就是西方拉丁语-1。网络中有许多字符集表

  • 一般来说,对于web浏览器和Windows,最好转换为Windows-1252,这是一个扩展,重新定义了0x80-0xBF范围,如MS Word中的特殊引号所示。浏览器实际上能够在ISO-559-1中解释这些代码,即使在Mac上也是如此

  • 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将(非法)显示该范围。比如逗号式的引号。