python unicode麻烦帮我按句解释下,unicode()函数作用到底是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python unicode麻烦帮我按句解释下,unicode()函数作用到底是啥?相关的知识,希望对你有一定的参考价值。
def ConvertStrData(self, strData):
myCodec='iso8859'
sdata=''
if True == isinstance(strData, str):
sdata=unicode(strData,myCodec) //这句话到底是什么意思?
elif True == isinstance(strData, unicode):
sdata=strData.encode('utf8')
sdata=sdata.decode(myCodec)
else:
numtmp=0
if True == isinstance(strData, float):
numtmp = int(strData)
else:
numtmp = strData
sdata = str(numtmp)
sdata=unicode(sdata,myCodec)
return sdata
UNICODE函数wei 预先编写的公式,可以对一个或多个值执行运算,并返回一个或多个值。函数可以简化和缩短工作表中的公式,尤其在用公式执行很长或复杂的计算时的公式语法和用法。如果文本包含部分代理项或数据类型无效,则UNICODE返回错误值#VALUE!。
Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串ABC在Python内部都是ASCII编码的。
扩展资料
Unicode为了解决传统的字符编码方案的局限而产生的,例如ISO 8859所定义的字符虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。
很多传统的编码方式都有一个共同的问题,即容许电脑处理双语环境(通常使用拉丁字母以及其本地语言),但却无法同时支持多语言环境(指可同时处理多种语言混合的情况)。
Unicode编码包含了不同写法的字,如“ɑ/a”、“户/户/戸”。然而在汉字方面引起了一字多形的认定争议。
参考资料来源:百度百科-Unicode
参考资料来源:百度百科-UNICODE 函数
参考技术A unicode函数按它的上下文来理解应该说就是这一句话的意思sdata=sdata.decode(myCodec)这个ConvertStrData函数应该是将所有的str ,unicode, int,float数据类型都转换成utf-8,然后再直接解码显示出来。应该是做特殊用途的。可能是教学目的。也可能是编辑器的需要,或者说调试的需要。
一般不需要这么麻烦。似乎有一个"%b"%strData的办法直接实现这个功能。不过我不记得格式符了。 应该不是%b
在python中unicode也只是一种特殊的编码格式存放。我印象中似乎用的是utf-16,不过有些人说python3里用的是utf-8。
不过在逻辑上unicode是没有编码的格式。进行I/O输出的时候一定要做encode("utf-8")这样类似的操作。
不过unicode是python内部的函数。如果它这么用,显然是自己重新定义了unicode。
如果它没有重新定义,那么它的程序逻辑中有几处就是错的。 不一致。追问
请问,sdata=strData.encode('utf8')
sdata=sdata.decode(myCodec)
这句话倒过来是不是效果是一样的?
都是将strDdata转化成utf-8?
不是这样子的。你这个程序我一直感觉它有问题。有可能它是错的。你从哪里弄来的代码?
比如:sdata=strData.encode('utf8')这句话的意思是将unicde编码成utf-8
而随之来的问题是sdata=sdata.decode(myCodec), 这句话是将string的bytecode,解压成unicode。
不过你原来是用utf-8编码的。为什么解码要用iso8859-1。这样显然是错误的。通常会出现异常。而且这样解码出来的也是乱码啦。
如果它仅仅是为了拿到原始内存中的bytecode,也不用这么decode啊。所以我才认为这个代码有问题。
这个编码不是为了自己看的,是为了写到文件中,在另一端还有一个程序反解码的。
追答全统一到utf-8就可以了。有这一句就可以了sdata=strData.encode('utf8')。我给你重写一下好了。
def ConvertStrData(self, strData):
for c in ['gb18030', 'utf-8','big-5']:
try:
return strData.decode(c).encode("utf-8")
except:continue
return strData
这样就成了
Python 中的 UTF-32
【中文标题】Python 中的 UTF-32【英文标题】:UTF-32 in Python 【发布时间】:2012-09-22 18:46:12 【问题描述】:我无法显示 unicode 项 u'\u201d'
。我对其他 unicode 项目没有问题。我使用了 UTF-8,但随后这个字符出现并在我的代码上下雨了。我在解释器中尝试了不同的东西。但基本上在哪里:
c = u'\u201d'
我收到此错误:
Traceback (most recent call last):
File "<pyshell#154>", line 1, in <module>
c.decode('utf-32')
File "C:\Python27\lib\encodings\utf_32.py", line 11, in decode
return codecs.utf_32_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201d' in position 0: ordinal not in range(128)
我需要在 GUI 中显示它,以便检查输出,然后将其存储为纯文本。 Transform unicode string in python 解释了一下,但是我仍然明显遗漏了一些东西。
【问题讨论】:
c.decode('utf-32')中的c是什么? 我提到的值 u'\u201d' 所以这个问题与 2 小时前你自己提出的问题 ***.com/questions/12545843/… 完全相同。 是的,cmets 中的一个人说它跑题了并要求重新发布....我现在对此感到非常沮丧,所以我最终这样做了,一旦我解决了这个问题,我将至少删除有用的 您还没有定义“GUI”的含义,也没有告诉我们哪个 OS+应用程序将打开生成的文本文件。他们都有所不同。 【参考方案1】:如果您遇到此异常,则表示您尝试在 unicode 字符串上调用 .decode()
。您应该只在字节字符串上调用 .decode()
,并且只在 unicode 字符串上调用 .encode()
。否则,解释器将首先使用默认编解码器(通常是'ascii')隐式编码或解码字符串,这是个坏消息。
总的来说,我建议仔细阅读http://farmdev.com/talks/unicode/...
【讨论】:
如果我编码 u'\u201d'.encode('utf-32') 我得到: '\xff\xfe\x00\x00\x1d \x00\x00' 我需要转换那个符号转换为 GUI 的纯文本并将其保存为 txt 定义“纯文本”。在这种情况下,没有“纯文本”之类的东西。我建议阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets 我已阅读该文件,它很有用,但我仍然对如何解决我的问题感到困惑。我所需要的只是将任何人类不可读的内容转换为可读格式,这样我就可以在某些条件下对其进行测试,然后将其写入文件。在任何意义上,我都不是专业的编码员。我只需要干净的输出,仅此而已【参考方案2】:如果你读过The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),你就会知道没有纯文本这样的东西..
但是,由于您坚持追求的内容与人们试图解释的内容之间似乎没有达成一致意见,我开始怀疑是否通过“将该符号转换为纯文本”您意思是“用引号(U + 0022)替换Unicode右双引号(U + 201D),然后编码为ASCII”。例如,类似:
In [45]: s = u"“curly quoted”"
In [46]: s
Out[46]: u'\u201ccurly quoted\u201d'
In [47]: print s
“curly quoted”
然后手动进行替换(搜索“unicode string sanitize”,您会发现更好的配方,包括针对不同字符的更多“降级”):
In [51]: fixer = dict.fromkeys([0x201c, 0x201d], u'"')
In [52]: s.translate(fixer)
Out[52]: u'"curly quoted"'
In [53]: s.translate(fixer).encode("ascii", "replace")
Out[53]: '"curly quoted"'
“替换”可以防止任何我们没有修复的东西。
【讨论】:
以上是关于python unicode麻烦帮我按句解释下,unicode()函数作用到底是啥?的主要内容,如果未能解决你的问题,请参考以下文章