在Java中将非英语字符串转换为普通字符串

时间:2015-06-04 14:44:20

标签: java

我需要针对某些基线验证某些文字。

例如:

String a="La Panthère"; 
String b="La Panthère";

我知道字符串b包含HTML文字,所以我使用Apache StringEscapeUtils给了我

String b="La Panthère";
b=StringEscapeUtils.unescapeHtml(b);

输出: - LaPanthère

但是我不知道字符串中存储的是什么。在某处,我知道这可能是上升文字,因此尝试下面的代码

a=Normalizer.normalize(a, Normalizer.Form.NFKD);

注意:我尝试了所有形式的Normalizer但没有任何效果。

有人可以帮我解决如何以与b相同的方式制作字符串吗?

1 个答案:

答案 0 :(得分:2)

Jesper所述,è模式通常表示编码错误。

那时,你已经不幸了。

替换è等补救措施不可取,也不安全。

转义或规范化String超出了范围,因为您的问题源于源代码,与HTML转换或重音规范化无关。

但是,有一些简单的习惯用法可以将String转换为不同的编码。

以下示例:

  • 模拟Windows-1252 String(在UTF-8环境中)。
  • 然后,它按原样打印(损坏,因为它是UTF-8打印流中的Windows-1252 String)。
  • 最后,它打印出它重新转换为UTF-8。

    String a = new String(
    "La Panthère".getBytes(Charset.forName("UTF-8")),
     Charset.forName("Cp1252")
    );
    System.out.println(a);
    System.out.println(
        new String(
            a.getBytes(Charset.forName("Cp1252")), 
            Charset.forName("UTF-8")
        )
    );
    

<强>输出

La Panthère
La Panthère

备注

上述转换习惯用法意味着您事先知道原始String是如何编码的。

当使用以下编码来解释彼此之间的文本时,会发生典型的编码问题:

  • ISO Latin 1
  • Windows的1252
  • UTF-8

Here列出了Java支持的编码及其规范名称。

在网络环境中,您通常会调用Javascript的encodeURIComponent函数在前端编码您的值,然后再将其发送到后端。