You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android XML布局文件中以转义Unicode格式写入Emoji?

Android XML中Emoji转义Unicode写法问题

我正在测试带不同肤色和性别变体的Emoji,下面这段XML代码能正常渲染:

<TextView
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="😀‍"
    android:textSize="48sp" />

这个“咧嘴笑”Emoji的Unicode编码是U+1F600,但我尝试两种转义写法都无效:

第一种写法:

<TextView
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="\uD83D\uDE00"
    android:textSize="48sp" />

第二种写法:

<TextView
    android:textColor="#000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="\u1F600"
    android:textSize="48sp" />

请问这是为什么?怎么用转义Unicode格式写出“😀‍”?

另外,桌面环境下这段Java代码能正常运行:

public class Main {

    public static void main(String[] args) {
        System.out.println("\uD83D\uDE00");
        System.out.println("😀");
    }
}

原因分析

  1. XML与Java的Unicode转义规则差异
    Java支持用\uXXXX表示4位十六进制Unicode码点,对于U+1F600这类超出U+FFFF的辅助平面字符,会拆分为两个代理对(\uD83D和\uDE00)并正确解析。但XML的\uXXXX转义仅支持4位十六进制值,既无法识别代理对的组合写法,也不支持直接写超过4位的\u1F600,因此两种写法都会失效。
  2. 目标Emoji是带零宽连接符的组合
    你示例中的😀‍并非单纯的U+1F600,而是U+1F600(咧嘴笑)加上U+200D(零宽连接符)的组合,这也是需要注意的细节。

解决方法

在Android XML中,要以转义Unicode格式表示该Emoji,可采用以下两种方式:

  1. 使用十进制实体转义
    将每个Unicode码点转换为十进制,用&#十进制值;格式书写。其中U+1F600对应十进制128512,U+200D对应十进制8205,组合后代码如下:
    <TextView
        android:textColor="#000000"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="&#128512;&#8205;"
        android:textSize="48sp" />
    
  2. 直接嵌入Emoji字符
    保持你最开始的写法,直接将😀‍写入android:text属性,只要XML文件以UTF-8编码保存(Android Studio默认配置),就能正常渲染。

内容的提问来源于stack exchange,提问作者Cheok Yan Cheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:32:04