向 MySQL 中插入数据时,出现如下错误:
"Incorrect string value: '\\xF0\\x9F\\x8C\\x9F\\xE4\\xBB...' for column 'content' at row 15"
原因:
MySQL 中数据字符集设置为“utf-8”,对于汉字来说足够;Mysql中 utf8 占3个字节,但是,3个字节对于表情符号是不够的,需4个字节;当插入字符串中有表情符号时,此时使用 utf8,会出现‘\xF0\x9F\x8D\x83\xF0\x9F’的问题。
替换掉文本中表情符号
import re
def get_clear_data(line):
compile_emoji = re.compile('['
'\U0001F300-\U0001F5FF' # -->
'\U0001F900-\U0001F9FF' # -->
'\U0001F600-\U0001F64F' # -->
'\U0001F680-\U0001F6FF' # -\U0001f6ff
'\u2600-\u26FF' # ☀ --> ⛿
'\u2700-\u27BF' # ✀ --> ➿
'\u24C2' # Ⓜ
'\U0001F1E6-\U0001F1FF' # -
'\U0001F170-\U0001F171' # -
'\U0001F17E-\U0001F17F' # -
'\U0001F18E' #
'\U0001F191-\U0001F19A' # -
# '\u0023' # #
# '\u002A' # *
# '\u0030-\u0039' # 0 --> 9
'\u2194-\u2199' # ↔ --> ↙
'\u21A9-\u21AA' # ↩ --> ↪
'\u2B05-\u2B07' # ⬅ --> ⬇
'\u2B1B' # ⬛
'\u2B1C' # ⬜
'\u2B50' # ⭐
'\u2B55' # ⭕
'\u2934-\u2935' # ⤴ --> ⤵
'\u3030' # 〰
'\u303D' # 〽
'\u3297' # ㊗
'\u3299' # ㊙
'\U0001F201-\U0001F202' # -->
'\U0001F21A' #
'\U0001F22F' #
'\U0001F232-\U0001F23A' # -->
'\U0001F250-\U0001F251' # -->
'\u203C' # ‼
'\u2049' # ⁉
'\u25AA' # ▪
'\u25AB' # ▫
'\u25B6' # ▶
'\u25C0' # ◀
'\u25FB-\u25FE' # ◻ --> ◾
'\u00A9' # ©
'\u00AE' # ®
'\u2122' # ™
'\u2139' # ℹ
'\U0001F004' #
'\U0001F0CF' #
'\u231A' # ⌚
'\u231B' # ⌛
'\u2328' # ⌨
'\u23CF' # ⏏
'\u23E9-\u23F3' # ⏩ --> ⏳
'\u23F8-\u23FA' # ⏸-⏺
']',
re.UNICODE)
ret = compile_emoji.sub('', line)
return ret
line = "决大家"
print(get_clear_data(line))
输出:
决大家
安装库: pip install emoji
def get_clear_data2(line):
import emoji
ret = emoji.demojize(line)
return ret
line = "决大家"
print(get_clear_data2(line))
输出:
决:glowing_star:大家
参考:
python Incorrect string value: ‘\xF0\x9F\xA6\x86\xF0\x9F…’ for column
pymysql.err.DataError: (1366, “Incorrect string value: ‘\xF0\x9F\x92\xA1 \xE4…‘ for column ‘d