当前位置: 首页 > 面试题库 >

Python,将4字节字符转换为避免MySQL错误“错误的字符串值:”

王高邈
2023-03-14
问题内容

我需要将(4个字节)的char转换为其他字符(在Python中)。这是将其插入到我的utf-8
mysql数据库中,而不会出现诸如以下的错误:“不正确的字符串值:行1的’行’的’\ xF0 \ x9F \ x94 \ x8E’

通过向mysql插入4字节的unicode引发的警告显示了这样做的方法:

>>> import re
>>> highpoints = re.compile(u'[\U00010000-\U0010ffff]')
>>> example = u'Some example text with a sleepy face: \U0001f62a'
>>> highpoints.sub(u'', example)
u'Some example text with a sleepy face: '

但是,在注释“
…错误的字符范围..”中,我得到与用户相同的错误,这显然是因为我的Python是UCS-2(不是UCS-4)构建。但是后来我不清楚该怎么办?


问题答案:

在UCS-2构建中,python内部在\U0000ffff代码点上为每个unicode字符使用2个代码单元。正则表达式需要与之配合使用,因此您需要使用以下正则表达式来匹配它们:

highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')

此正则表达式匹配使用UTF-16代理对编码的任何代码点(请参见UTF-16代码点U + 10000至U +
10FFFF)

为了使它在Python UCS-2和UCS-4版本之间兼容,可以使用try:/ except来使用一个或另一个:

try:
    highpoints = re.compile(u'[\U00010000-\U0010ffff]')
except re.error:
    # UCS-2 build
    highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')

在UCS-2 python构建上的演示:

>>> import re
>>> highpoints = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
>>> example = u'Some example text with a sleepy face: \U0001f62a'
>>> highpoints.sub(u'', example)
u'Some example text with a sleepy face: '


 类似资料:
  • 问题内容: 我正在使用以下代码从外部程序获取标准输出: 方法返回一个字节数组: 但是,我想将输出作为普通的字符串使用。这样我就可以像这样打印它: 我认为这就是方法的用途,但是当我尝试使用它时,我又得到了相同的字节数组: 如何将字节值转换回字符串?我的意思是,使用”batteries”而不是手动进行操作。我希望它与Python 3兼容。 问题答案: 你需要解码bytes对象以产生一个字符串:

  • 问题内容: 由于某种原因,当我执行代码时… 我知道了 如何获得退货? 谢谢! 问题答案: 怎么样: 得到的原因是正在执行列表串联。由于is ,可以看作是,将其连接到空列表时得到(其他值也一样)。 为了使它按自己的方式工作,您需要:

  • 如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?

  • 问题内容: 我想在GO中将字符串数组转换为字节数组,以便可以将其写到磁盘上。将字符串数组()解码为字节数组()的最佳解决方案是什么? 我正在考虑对字符串数组进行两次迭代,第一个迭代以获得字节数组所需的实际大小,然后第二个迭代写入每个元素的长度和实际字符串()。 解决方案必须能够以其他方式进行转换;从一个到一个。 问题答案: 让我们忽略一个事实,那就是走一秒钟。您需要做的第一件事是将序列化格式编组为

  • 问题内容: 我有一个使用转换的字符串,现在我正尝试将其转换回来,但是当UIPicker启动时,这给了我错误的一天 我尝试了硬编码,但结果仍然相同。UIDatePicker上的日期在1991年12月22日开始。 如果我使用hardcore ,则从1979年12月23日开始。 (我不知道是不是这种情况,但是我在UIPickerView中有,但它是为字符串使用的。。我不认为是因为保存时,它保存了正确的值

  • 问题内容: 假设我有一个4字符串,并且我想将此字符串转换为字节数组,其中字符串中的每个字符都转换为等效的十六进制。例如 我正在尝试让我的输出成为 有没有简单的方法可以做到这一点? 问题答案: 编码功能可以为您提供帮助,编码返回字符串的编码版本 或者你可以使用数组模块