什么是 Unicode
Unicode 是一个国际标准,为世界上几乎所有书写系统的每个字符分配唯一的编号(码点,Code Point)。它解决了早期编码(ASCII、GB2312、Shift-JIS)的兼容性问题。
Unicode 表示形式
| 形式 | 示例 | 说明 |
|------|------|------|
| Unicode 码点 | U+4F60 | 标准表示法 |
| UTF-8 | \xe4\xbd\xa0 | 变长编码(1-4 字节) |
| UTF-16 | \u4f60 | 2 或 4 字节 |
| Unicode 转义序列 | \u4F60 | JavaScript/Java 中使用 |
| HTML 实体 | 你 | 十进制实体 |
| HTML 实体(十六进制) | 你 | 十六进制实体 |
为什么需要 Unicode 编码/解码
- 跨语言兼容:不同编程语言间的字符传输
- JSON 安全:确保 JSON 中的特殊字符正确传输
- 数据库存储:处理数据库的字符编码问题
- URL 编码:URL 中包含非 ASCII 字符时的编码
- 日志分析:处理包含 Unicode 字符的日志数据
- 国际化开发:处理多语言文本的编码转换
UTF-8 vs UTF-16
| 特性 | UTF-8 | UTF-16 | |------|-------|--------| | 字节数 | 1-4 字节 | 2-4 字节 | | ASCII 兼容 | ✅ 完全兼容 | ❌ 不兼容 | | 网络传输 | ✅ 主流 | ❌ 不常用 | | 字节序 | 无(无 BOM) | 有(大端/小端) | | 空间效率 | 英文高效 | 中文高效 |
如何使用在线工具
使用 DevToolkit Pro 的 Unicode 编码/解码工具:
- 输入文本或 Unicode 编码字符串
- 选择编码/解码模式
- 支持多种格式输出:
\uXXXXJavaScript 转义&#XXXX;HTML 实体U+XXXXUnicode 标准表示
- 实时转换结果
代码中的 Unicode 处理
JavaScript
// 字符 → Unicode 码点
function toUnicode(str) {
return Array.from(str).map(char =>
'U+' + char.codePointAt(0).toString(16).toUpperCase().padStart(4, '0')
);
}
// Unicode 码点 → 字符
function fromUnicode(codePoint) {
return String.fromCodePoint(parseInt(codePoint.replace('U+', ''), 16));
}
// JavaScript 转义序列
function toEscaped(str) {
return Array.from(str).map(char =>
'\\u' + char.codePointAt(0).toString(16).padStart(4, '0')
).join('');
}
Python
import unicodedata
# 字符 → Unicode 码点
def to_unicode(char):
return f"U+{ord(char):04X}"
# Unicode 码点 → 字符
def from_unicode(code_point):
return chr(int(code_point.replace('U+', ''), 16))
# 获取字符信息
def char_info(char):
return {
'char': char,
'code_point': f"U+{ord(char):04X}",
'name': unicodedata.name(char, 'UNKNOWN'),
'category': unicodedata.category(char)
}
常见 Unicode 字符范围
| 范围 | 内容 | 示例 | |------|------|------| | U+0000-U+007F | 基本拉丁字母 | A, b, 1, ! | | U+0080-U+00FF | 拉丁补充 | á, ñ, ü | | U+0400-U+04FF | 西里尔字母 | А, Б, В | | U+4E00-U+9FFF | CJK 统一汉字 | 中, 文, 字 | | U+3040-U+309F | 平假名 | あ, い, う | | U+30A0-U+30FF | 片假名 | ア, イ, ウ | | U+1F600-U+1F64F | Emoji 表情 | 😀, 😂, ❤️ |
FAQ
为什么同一个汉字在不同编码中大小不同?
不同编码方式使用不同字节数:UTF-8 中汉字占 3 字节,UTF-16 中占 2 字节,GBK 中占 2 字节。这是编码方案设计的不同。
Unicode 和 UTF-8 有什么关系?
Unicode 是字符集标准(定义每个字符的编号)。UTF-8 是 Unicode 的一种编码实现(定义如何用字节表示这些编号)。UTF-8 是目前互联网最广泛使用的编码。
为什么有些中文字符显示为乱码?
常见原因:编码声明不匹配(文件用 UTF-8 保存但以 GBK 读取)、缺少字体支持、传输过程中编码转换错误。确保全链路使用统一的 UTF-8 编码。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。