Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.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 - Fatal编程技术网

在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";
我知道string
b
包含HTML文本,所以我使用Apache
StringEscapeUtils
,它给了我

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(“Ã,”)