如何将表列中转义Unicode字符替换为对应可读字符实现文本规范化
转义Unicode文本转可读文本解决方案
你需要实现的是将字符串中的转义Unicode序列(格式为\uXXXX)解码为对应的Unicode字符,NORMALIZE函数的作用是统一Unicode字符的编码形式,不具备解码转义序列的功能,因此无法达到预期效果。
场景1:Excel / Google Sheets 处理
- 可以使用自定义函数实现解码,以Google Sheets为例,按
扩展程序 > Apps 脚本打开脚本编辑器,粘贴以下代码:
function DECODE_UNICODE_ESCAPE(str) { return str.replace(/\\u([\dA-Fa-f]{4})/g, (match, hex) => String.fromCodePoint(parseInt(hex, 16))); }
- 保存后回到表格,在目标单元格输入
=DECODE_UNICODE_ESCAPE(待处理单元格)即可得到解码结果,示例中=DECODE_UNICODE_ESCAPE("C\u00f3mo funciona")会直接返回Cómo funciona - Excel使用VBA实现逻辑一致,替换对应语法即可。
场景2:Python 处理pandas数据表
- 针对pandas的DataFrame指定列,直接使用
unicode_escape编码解码即可:
import pandas as pd # 假设df是你的数据表,target_col是待处理的列名 df[target_col] = df[target_col].str.encode('utf-8').str.decode('unicode_escape')
- 单行文本测试:
"C\u00f3mo funciona".encode('utf-8').decode('unicode_escape')输出结果为Cómo funciona
场景3:SQL 处理
- 以MySQL为例,可自定义函数实现转义解码:
-- 自定义解码函数 DELIMITER // CREATE FUNCTION DECODE_UNICODE_ESCAPE(str TEXT) RETURNS TEXT DETERMINISTIC BEGIN DECLARE pos INT DEFAULT 1; DECLARE hex_str CHAR(4); DECLARE uni_char CHAR(1); WHILE pos <= LENGTH(str) DO IF SUBSTRING(str, pos, 2) = '\\u' THEN SET hex_str = SUBSTRING(str, pos+2, 4); SET uni_char = CHAR(CONV(hex_str, 16, 10) USING utf8mb4); SET str = CONCAT(LEFT(str, pos-1), uni_char, SUBSTRING(str, pos+6)); ELSE SET pos = pos + 1; END IF; END WHILE; RETURN str; END // DELIMITER ; -- 调用函数批量更新列 UPDATE 表名 SET 待处理列名 = DECODE_UNICODE_ESCAPE(待处理列名);
内容的提问来源于stack exchange,提问作者Julio Ayala
相关产品推荐
相关产品推荐

