分页: 1 / 2

字符串格式转换

发表于 : 2016-12-16 9:48
d313206775
我现在有些字符串是ASCII码和unicode格式混编的,例如下面:
a = "\u5317\u4eacabc"
我想转化为 a = "北京abc"
请问这该怎么转。

Re: 字符串格式转换

发表于 : 2016-12-16 10:48
HuntXu
以前写的

代码: 全选

$ echo "\u5317\u4eacabc" | perl -MEncode -pe  's/\\u([0-9a-fA-F]{4})/encode("utf8", pack("U", hex($1)))/eg'
北京abc

Re: 字符串格式转换

发表于 : 2016-12-16 11:22
oneleaf

代码: 全选

>>> a = u'\u5317\u4eacabc'
>>> print a.encode("utf-8")
北京abc

Re: 字符串格式转换

发表于 : 2016-12-16 11:30
d313206775
oneleaf 写了:

代码: 全选

>>> a = u'\u5317\u4eacabc'
>>> print a.encode("utf-8")
北京abc
现在我的字符串是不带前面那个‘u’,就单独是 a = '\u5317\u4eacabc'

Re: 字符串格式转换

发表于 : 2016-12-16 11:34
d313206775
HuntXu 写了:以前写的

代码: 全选

$ echo "\u5317\u4eacabc" | perl -MEncode -pe  's/\\u([0-9a-fA-F]{4})/encode("utf8", pack("U", hex($1)))/eg'
北京abc
试了下,结果是正确的。
初学者,不知道如何改成函数。

Re: 字符串格式转换

发表于 : 2016-12-16 11:36
d313206775
HuntXu,
能给改成函数吗,初学者,看不懂

Re: 字符串格式转换

发表于 : 2016-12-16 11:41
oneleaf

代码: 全选

>>> a = "\u5317\u4eacabc"
>>> print a.decode('unicode-escape').encode("utf-8")
北京abc

Re: 字符串格式转换

发表于 : 2016-12-16 13:49
d313206775
oneleaf,
用print是成功了。但我将经过转化的字符串用logging打印下来后,就还是错误的。

Re: 字符串格式转换

发表于 : 2016-12-16 16:58
oneleaf
如何错误?文件的编码是什么?

Re: 字符串格式转换

发表于 : 2016-12-16 18:05
d313206775
oneleaf,
打印下来的内容为:

代码: 全选

temp_project>:114] the unicode--title is: \u97f5\u52a8\u4e2d\u56fd China in Motion 2015
[I 161216 13:37:31 <temp_project>:116] the title is: \u97f5\u52a8\u4e2d\u56fd China in Motion 2015
[I 161216 13:37:31 <temp_project>:114] the unicode--title is: \u4e2d\u56fd
[I 161216 13:37:31 <temp_project>:116] the title is: \u4e2d\u56fd
文档编码格式为:utf-8

Re: 字符串格式转换

发表于 : 2016-12-16 18:22
oneleaf
试试:

直接写入 a.decode('unicode-escape')

Re: 字符串格式转换

发表于 : 2016-12-16 19:17
d313206775
oneleaf,
能试的都试了一遍了。
现在就是在想为啥 print就可以。

刚才发现了这么个有意思的事:

代码: 全选

>>> a = "\u0026"
>>> b = a.decode('unicode-escape').encode('utf-8')
>>> b
'&'
>>> aa = "\u82f1"
>>> bb = aa.decode('unicode-escape').encode('utf-8')
>>>bb
'\xe8\x8b\xb1'
>>> print bb
英
>>> 
后来又试了试 \u00开头的字符,都能够正常输出。但其他开头的unicode字符,就输出又问题。

Re: 字符串格式转换

发表于 : 2016-12-16 19:31
d313206775
d313206775, oneleaf,
后来仔细比对了下,只有原来是ASCII码对应的那些字符,转化为unicode编码后,最后才会显示成功。其他字符则最终会转化失败。

Re: 字符串格式转换

发表于 : 2016-12-16 21:26
b33e
python3:

代码: 全选

In [1]: a=bytes(u'\u5317\u4eacabc','utf-8').decode('utf-8')

In [2]: a
Out[2]: '北京abc'

Re: 字符串格式转换

发表于 : 2016-12-20 14:54
d313206775
b33e,
我用的是python2.7,没有bytes函数。另外,我的字符串格式为:'\u5317\u4eacabc',不是u'\u5317\u4eacabc',前面不带u