首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python 2.7中验证字符串是有效的UTF-8字符串

如何在python 2.7中验证字符串是有效的UTF-8字符串
EN

Stack Overflow用户
提问于 2020-11-02 10:14:24
回答 1查看 523关注 0票数 0

我有下面的绳子-

“\xad\x80\xB1\x93”

使用此字符串在PostgreSQL DB中执行查询时,会引发以下错误-

代码语言:javascript
复制
DataError: invalid byte sequence for encoding "UTF8": 0xed 0xad 0x80

在python 2.7中测试它时(在执行查询之前),它不会引发异常-

窗户测试-

代码语言:javascript
复制
'\xed\xad\x80\xed\xb1\x93'.decode("utf-8")
u'\U000e0053'

Linux测试-

代码语言:javascript
复制
'\xed\xad\x80\xed\xb1\x93'.decode("utf-8")
u'\udb40\udc53'

在python3中,它实际上引发了一个异常-

代码语言:javascript
复制
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 0: invalid continuation byte

我如何在python2.7中签入它不是有效的utf-8字符串?

EN

回答 1

Stack Overflow用户

发布于 2020-11-02 11:19:32

这是一个有效的UTF-8代码,但它不属于一个字符.

0xEDAD 80转换为UNICODE代码点DB40,这是一个“高代孕”,而不是字符本身。

因此,这些数据不是UTF-8编码字符.在UTF-8中编码代母是没有意义的,它们通常用于编码,如UTF-16和UCS-2。

RFC 3629实际上声明不允许编码代理:

UTF-8的定义禁止在U+D800和U+DFFF之间编码字符号,这些字符号保留用于UTF-16编码形式(作为代理项对),并且不直接表示字符。

因此,这听起来像是Python中的一个bug,您可以这样报告它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64643547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档