gpt4 book ai didi

python - "Broken"以 UTF-8 编码的 unicode 字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:03 25 4
gpt4 key购买 nike

这两天我一直在研究 unicode 及其 Python 实现,我想我已经大致了解了它的含义。为了获得自信,我问我对当前问题的假设是否正确。

在 Django 中,表单给我 unicode 字符串,我怀疑它是“损坏的”。 Python 中的 Unicode 字符串应该用 UTF-8 编码,对吗?在文本字段中输入字符串“fähre”后,浏览器会在 POST 请求中发送字符串“f%c3%a4hre”(通过 wireshark 检查)。但是,当我通过 form.cleaned_data 检索值时,我得到的是字符串 u'f\xa4hre'(请注意它是一个 unicode 字符串)。据我了解,这是 ISO-8859-1 编码的 unicode 字符串,这是不正确的。正确的字符串应该是 u'f\xc3\xa4hre',它是一个 UTF-8 编码的 unicode 字符串。那是 Django 错误还是我对它的理解有问题?为了解决这个问题,我写了一个函数来将它应用于从 Django 表单输入的任何文本:

def fix_broken_unicode(s):
return unicode(s.encode(u'utf-8'), u'iso-8859-1')

哪个是

>>> fix_broken_unicode(u'f\xa4hre')
u'f\xc3\xa4hre'

这对我来说似乎不太优雅,但是将 Django 的 settings.DEFAULT_CHARSET 设置为 'utf-8' 没有帮助,也没有任何其他作用。我正在尝试在整个应用程序中使用 unicode,这样我以后就不会遇到任何奇怪的错误,但是用 u'...' 标记所有字符串显然是不够的。

编辑: 考虑到 Dirk 等人的回答,我现在将把字符串按原样保存到数据库中。真正的问题是我试图对这些类型的字符串进行 urlencode 以将它们用作 Twitter API 等的输入。但是,在 GET 或 POST 请求中,显然需要标准 urllib.urlencode() 函数执行的 UTF-8 编码处理不正确(抛出异常)。看看我在 pastebin 中的解决方案并随时对此发表评论。

最佳答案

u'f\xa4hre' 是一个 unicode 字符串,未编码为任何内容。 unicode 代码点 0xa4 是字符 ää 在 ISO-8859-1 中也被编码为字节 0xa4 并不重要。

unicode 字符串可以包含任何 unicode 字符,无需以某种方式对它们进行编码。例如 轮渡 将表示为 u'\u8f6e\u6e21',这只是两个 unicode 代码点。 UTF-8 编码将是更长的 '\xe8\xbd\xae\xe6\xb8\xa1'

因此无需修复编码,您只看到 unicode 字符串的内部表示。

关于python - "Broken"以 UTF-8 编码的 unicode 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com