java字符串unicode代码点转换为字符

java字符串unicode代码点转换为字符,java,string,unicode,codepoint,Java,String,Unicode,Codepoint,好的,我觉得这个问题被问了很多次,但我找不到答案。我正在比较由两个不同程序生成的两个不同文件。当然,这两个程序都是从相同的数据库查询生成文件的。我遇到了以下差异: s1=三星-移动USB充电器 vs s2=Samsung\u2013移动USB充电器 如何将s2转换为s1,甚至更好,如何比较两者而不产生差异?互联网上有人提到使用ApacheComons lang的类,但我找不到任何有用的东西。生成第一个字符串的程序正在使用字符替换回退机制以ASCII编写文件。第二种方法是用Unicode编写文件

好的,我觉得这个问题被问了很多次,但我找不到答案。我正在比较由两个不同程序生成的两个不同文件。当然,这两个程序都是从相同的数据库查询生成文件的。我遇到了以下差异:

s1=
三星-移动USB充电器

vs

s2=
Samsung\u2013移动USB充电器


如何将s2转换为s1,甚至更好,如何比较两者而不产生差异?互联网上有人提到使用ApacheComons lang的类,但我找不到任何有用的东西。

生成第一个字符串的程序正在使用字符替换回退机制以ASCII编写文件。第二种方法是用Unicode编写文件

可以通过使用相同的回退机制,以ASCII格式复制第二个文件来比较这两个文件

最好的解决方案是修改第一个程序,使其也使用Unicode


(第二个文件可能使用的不是Unicode,因为其他一些字符集包括破折号。如果是这样,那么最好的解决方案是使用Unicode编写这两个文件,如果可能的话。)

您可以使用

此代码将打印
true

boolean equal = "Samsung \u2013 Mobile USB Chargers"
                    .replaceAll("\\p{Pd}", "-")
                    .equals("Samsung - Mobile USB Chargers");
System.out.println(equal);

请注意,这将应用于具有该属性的所有字符(如〰 U+3030波形破折号)。中包含具有破折号标点(Pd)属性的字符的综合列表。Java6支持Unicode 4。有关标点符号的讨论,请参阅。

注意,第一个字符串有一个ASCII连字符(连字符-减号),而第二个字符串有一个EN-DASH.Hmm,因此您要说的是,除了执行某种查找表之外,这两个字符串无法以任何简单的方式进行比较?无法更改任何输出。是的,一个是用unicode写的,而另一个我相信是ascii码。虽然我不是100%确定。基本上是遗留的C++应用程序,而另一个是java应用程序。因此,我们注意到,由于unicode字符/代码点,出现了许多变化。忽略这些变化的最佳方式是什么?非常有趣。我想这让我更接近我的答案,我会继续做研究。现在,我会给你接受的答案,并阅读你共享的这个unicode链接。@Mohamed Nuur-我对我的帖子做了一些更正;第6章中提到的某些破折号字符(如TILDE U+007E)不具有Pd属性。