0

据我所知,我知道 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

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

4

1 回答 1

3

这些不是不同的数字……</p>

  • 3081 = 0c09 = ఉ = 泰卢固语字母 U
  • 3108 = 0c24 = త = 泰卢固语字母 TA
  • 3149 = 0c4d = ్ = 泰卢固语符号维拉玛

… 等等。

表示同一个Unicode 代码点的两种不同方式。

第一个是十进制数(以 10 为底)。第二个是十六进制数(以 16 为基数)。

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

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

于 2013-10-15T10:16:38.370 回答