在Java中将非英语字符串转换为普通字符串
我需要根据一些基线验证某些文本 例如:在Java中将非英语字符串转换为普通字符串,java,Java,我需要根据一些基线验证某些文本 例如: String a="La Panthère"; String b="La Panthère"; 我知道stringb包含HTML文本,所以我使用ApacheStringEscapeUtils,它给了我 String b="La Panthère"; b=StringEscapeUtils.unescapeHtml(b); 输出:-拉潘太尔 但是我不知道字符串a中存储了什么。从某种程度上说,我知道这可能是上升文字,
String a="La Panthère";
String b="La Panthère";
我知道stringb
包含HTML文本,所以我使用ApacheStringEscapeUtils
,它给了我
String b="La Panthère";
b=StringEscapeUtils.unescapeHtml(b);
输出:-拉潘太尔
但是我不知道字符串a中存储了什么。从某种程度上说,我知道这可能是上升文字,因此尝试了下面的代码
a=Normalizer.normalize(a, Normalizer.Form.NFKD);
注意:我尝试了所有形式的规范化器,但没有任何效果
有人能帮我用与b
相同的方式制作字符串a吗?如前所述,模式通常表示编码错误
到那时,你已经不走运了
诸如更换è
之类的补救措施既不可取,也不安全
转义或规范化字符串
超出了范围,因为问题出在源代码,与HTML转换或重音规范化无关
但是,有一些简单的习惯用法可以将字符串
转换为不同的编码
下面是一个例子:
- 模拟Windows-1252
字符串(在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
注释
上面描述的转换习惯用法意味着您知道原始的字符串是如何预先编码的
当使用以下编码相互解释文本时,会出现典型的编码问题:
- ISO拉丁语1
- Windows-1252
- UTF-8
这是Java支持的编码及其规范名称的列表
在web环境中,在将值发送到后端之前,通常会调用Javascript函数在前端对值进行编码。看起来像“La PanthÃre”的字符串很可能是使用错误的字符编码的结果。a=a.replace(“Ã,”)代码>