【问题标题】:Unicode Character Java [duplicate]Unicode字符Java [重复]
【发布时间】:2016-04-27 14:56:15
【问题描述】:

我不能在 java 中使用 unicode 字符。我把树 unicode 放进去,它只是作为一个小盒子和一个 4 出来。它在一个小程序中,我把代码放在 public void paint(Graphics g) 反正代码在下面

    g.drawString("\u1F334",150,150);

【问题讨论】:

标签: java unicode graphics applet


【解决方案1】:

来自JLS 3.3

Java 编程语言的编译器(“Java 编译器”)首先识别其输入中的 Unicode 转义,将 ASCII 字符 \u 后跟 四个 十六进制数字转换为 UTF-16 代码单元 ( §3.1) 用于指示的十六进制值,并传递所有其他字符不变。 表示补充字符需要两个连续的 Unicode 转义符。

(强调)

具体来说,您需要 UTF-16 BE(大端)编码。对于棕榈树,序列(如on the page you linked 所述)是"\uD83C\uDF34"

【讨论】:

  • 固定数量的十六进制字符似乎是合乎逻辑的,例如在法国,我们不希望将“n\u00E9ant”打印为“nບnt”,我们想要的是“néant”。
【解决方案2】:

Unicode 代码点 U+1F334 表示java char 范围之外的“字符”。 Java 使用 UTF-16 Unicode 编码,字符使用 16 位。而 U+1F334 在 3 字节范围内。

你可以这样做:

int[] codepoints = { 0x1F334 };
String emoji = new String(codepoints, 0, codepoints.length);

这将产生一个带有一对字符的字符串,尽管使用的是 UTF-16 的转义格式,并且不是\u1F33\u0004 这样简单的东西(错误)。

但是,如果字体不能代表该 Unicode 字符,您将收到一个小框,现在带有六位数字 01F / 334。

Font font = ...
if (!font.canDisplay(0x1F334)) {
    s = s.replace(emoji, " :) ");
}

不可能每个浏览器都有完整的 Unicode 字体可用。您可以尝试使用 Swing 的 HTML 功能并在 HTML JTextPane 等中使用嵌入的图像。

【讨论】:

  • 那行不通...它必须在 java 小程序中...
  • 一个 JApplet 可以做 swing,一个 Applet 只有 awt。当然,如果您选择图像 i.o,您可以使用 g.drawStringg.drawImage。文本。
  • 说实话,作为一个普通用户不会有一个完整的Unicode字体,这会很困难。小程序也可能从浏览器中消失,作为 java 浏览器插件。对于字体,您可能会尝试在 HTML/CSS 中传递您自己的字体,因此您可以在小程序中引用它。是否一切正常...
猜你喜欢
  • 2014-01-07
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 2012-05-03
  • 2016-08-30
  • 2017-01-29
相关资源
最近更新 更多