我需要根据某些基线验证某些文本。
例如:
String a="La Panthère";
String b="La Panthère";
我知道字符串 b
包含 HTML 文字,所以我使用 Apache StringEscapeUtils
它给了我
String b="La Panthère";
b=StringEscapeUtils.unescapeHtml(b);
输出:- La Panthère
但是我不知道字符串 a 中存储了什么。从某处我知道这可能是上升文字,因此尝试了下面的代码
a=Normalizer.normalize(a, Normalizer.Form.NFKD);
注意:我尝试了所有形式的标准化器,但没有任何效果。
有人可以帮我如何以与 b
相同的方式创建字符串 a 吗?
最佳答案
如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 拉丁语 1
- Windows-1252
- UTF-8
Here是 Java 支持的编码及其规范名称的列表。
在 Web 环境中,您通常会调用 Javascript 的 encodeURIComponent函数在将值发送到后端之前在前端对其值进行编码。
关于java - Java中将非英文字符串转换为普通字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30647017/