java - Java中将非英文字符串转换为普通字符串

标签 java

我需要根据某些基线验证某些文本。

例如:

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/

相关文章:

java - 在 Java 中使用类型转换和泛型

java - Android 应用程序在解析一个特定网站时崩溃

java - Eclipse/Java/Android 无法执行 dex : Multiple dex files define

java - 将参数传递给 neo4j 密码查询

java - 使用 Java 处理绘制数据图形

java - 将base64编码的pdf转换为文件输入流,而不将文件写入系统

java - 写入文件不会写入

Java同步-不正确的发布

java - 有没有一种方法可以将数据从一个 servlet 传递到另一个 servlet,同时也将相同的数据传递到 jsp?

java.util.Random 零参数查询