java和mysql中相同字符串的不同unicodes

时间:2013-10-15 10:01:21

标签: java mysql utf-8 utf

据我所知,我知道unicode字符意味着每个字母都有一个唯一的代码。

在我的数据库中,我设置了utl8。

在这里,我将一个字符串(ఉత్తరప్రదేశ్)直接保存到java中的数据库中。然后将其另存为

ఉత్తరప
్రదేశ్ 

但我使用

保存在数据库中的相同字符串
escapeUnicode(StringEscapeUtils.unescapeHtml("here string"));


public String escapeUnicode(String input) {
   StringBuilder b = new StringBuilder(input.length());
   Formatter f = new Formatter(b);
    for (char c : input.toCharArray()) {
      if (c < 128) {
        b.append(c);
      } else {
        f.format("\\u%04x", (int) c);
      }
     }
   return b.toString();
}

正在生成unicode

\u0c09\u0c24\u0c4d\u0c24\u0c30\u0c2a\u0c4d\u0c30\u0c26\u0c47\u0c36\u0c4d

两者都在浏览器中正确显示。为什么它们都生成不同的unicodes? 提前谢谢..

1 个答案:

答案 0 :(得分:3)

那些不同的数字......

  • 3081 = 0c09 =ఉ= TELUGU LETTER U
  • 3108 = 0c24 =త= TELUGU LETTER TA
  • 3149 = 0c4d =్= TELUGU SIGN VIRAMA

......等等。

两种不同的方式来表示相同的Unicode code point

第一个是十进制数字(基数为10)。第二个是hexadecimal个数字(基数为16)。

使用Formatter等类时,有时阅读文档会有所帮助。然后,您可能会理解为什么将f.format("\\u%04x"粘贴到代码中。

提示:如果您有Mac,请下载UnicodeChecker应用,查看Unicode中定义的每个字符的十进制和十六进制数字。