如何跳过句子中的 4 字节 unicode 字
How to skip 4-byte unicode word in a sentence
向 mysql(utf8) 插入 4 字节 unicode 时出现警告。
如果句子中存在 4 字节的 unicode 字,我想跳过它。
这样它就可以成功插入到mysql。 :D
例如。 '\xf0\x9f\x8e\x81' 是一个礼物图标。
句子是'This is great.'
它可以这样处理。 'This is great.'
非常感谢!!!!!!
假设您最初拥有 Unicode 格式的字符串,您可以通过执行以下操作从 Basic-Multilingual-Plane 字符之外删除字符:
if len(u'\U00010000') == 1:
s = re.sub(u'[\U00010000-\U001FFFFF]', u'', s)
else:
s = re.sub(u'[\uD800-\uDFFF]', u'', s)
(这两个分支是满足 Python '窄构建'所必需的,例如 Python 2 的标准 Windows 构建,其中字符串使用 UTF 存储非 BMP 字符-16 个代理代码单元。如果您使用的是最近的 Python 3,那么您可以跳过此步骤,因为所有构建现在都是“宽”的。)
但在任何情况下,最好将表配置为使用 utf8mb4
编码存储数据,它代表“真正的”UTF-8,包括四字节字符,而不是 MySQL的有限utf8
.
向 mysql(utf8) 插入 4 字节 unicode 时出现警告。
如果句子中存在 4 字节的 unicode 字,我想跳过它。
这样它就可以成功插入到mysql。 :D
例如。 '\xf0\x9f\x8e\x81' 是一个礼物图标。
句子是'This is great.'
它可以这样处理。 'This is great.'
非常感谢!!!!!!
假设您最初拥有 Unicode 格式的字符串,您可以通过执行以下操作从 Basic-Multilingual-Plane 字符之外删除字符:
if len(u'\U00010000') == 1:
s = re.sub(u'[\U00010000-\U001FFFFF]', u'', s)
else:
s = re.sub(u'[\uD800-\uDFFF]', u'', s)
(这两个分支是满足 Python '窄构建'所必需的,例如 Python 2 的标准 Windows 构建,其中字符串使用 UTF 存储非 BMP 字符-16 个代理代码单元。如果您使用的是最近的 Python 3,那么您可以跳过此步骤,因为所有构建现在都是“宽”的。)
但在任何情况下,最好将表配置为使用 utf8mb4
编码存储数据,它代表“真正的”UTF-8,包括四字节字符,而不是 MySQL的有限utf8
.