繁体   English   中英

这是确保在utf-8中编码python unicode“string”的最佳方法吗?

[英]Is this the best way to ensure that a python unicode “string” is encoded in utf-8?

从库中的任意“字符串”给出我无法控制,我想确保“字符串”是unicode类型并以utf-8编码。 我想知道这是否是最好的方法:

import types

input = <some value from a lib I dont have control over>

if isinstance(input, types.StringType):
    input = input.decode("utf-8")
elif isinstance(input, types.UnicodeType):
    input = input.encode("utf-8").decode("utf-8")

在我的实际代码中,我将其包装在try / except中并处理错误,但我将该部分留下了。

Unicode对象未编码(它在内部,但作为Python用户,这应该是透明的)。 line input.encode("utf-8").decode("utf-8")没有多大意义:你在开头的末尾得到完全相同的Unicode字符序列。

if isinstance(input, str):
    input = input.decode('utf-8')

您需要确保将str对象(字节字符串)转换为Unicode字符串。

只是;

try:
    input = unicode(input.encode('utf-8'))
except ValueError:
    pass

寻求宽恕总比获得许可更好。

我认为你对Unicode和编码有误解。 Unicode字符只是数字。 编码是数字的表示。 将Unicode字符视为15个概念,编码为15,1111,F,XV。 在解码编码并“知道”Unicode值之前,您必须知道编码(十进制,二进制,十六进制,罗马数字)。

如果您无法控制输入字符串,则很难将其转换为任何字符串。 例如,如果从文件读取输入,则必须知道文本文件的编码以decode其有意义地decode为Unicode,然后将其encode为用于C ++库的“UTF-8”。

您确定要以Unicode类型存储UTF-8编码序列吗? 通常,Python使用UCS-2或-4将字符存储在types.UnicodeType中,有时称为“宽”字符,它应该能够包含来自所有合理常见脚本的字符。

人们想知道这是什么类型的lib,有时输出types.StringType,有时是types.UnicodeType。 如果我会猜测,lib总是生成type.StringType,但不会告诉它在哪个编码。如果是这种情况,你实际上是在寻找可以猜出charset是什么类型的代码.StringType是编码的如。

在大多数情况下,这很容易,因为您可以假设它是例如latin-1或UTF-8。 如果文本实际上可以是任何奇数编码(例如,带有正确标题的传入邮件),则需要一个猜测编码的库。 http://chardet.feedparser.org/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM