字符串格式转换
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
字符串格式转换
我现在有些字符串是ASCII码和unicode格式混编的,例如下面:
a = "\u5317\u4eacabc"
我想转化为 a = "北京abc"
请问这该怎么转。
a = "\u5317\u4eacabc"
我想转化为 a = "北京abc"
请问这该怎么转。
- HuntXu
- 帖子: 5776
- 注册时间: 2007-09-29 3:09
Re: 字符串格式转换
以前写的
代码: 全选
$ echo "\u5317\u4eacabc" | perl -MEncode -pe 's/\\u([0-9a-fA-F]{4})/encode("utf8", pack("U", hex($1)))/eg'
北京abc
HUNT Unfortunately No Talent...
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: 字符串格式转换
代码: 全选
>>> a = u'\u5317\u4eacabc'
>>> print a.encode("utf-8")
北京abc
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
现在我的字符串是不带前面那个‘u’,就单独是 a = '\u5317\u4eacabc'oneleaf 写了:代码: 全选
>>> a = u'\u5317\u4eacabc' >>> print a.encode("utf-8") 北京abc
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
试了下,结果是正确的。HuntXu 写了:以前写的代码: 全选
$ echo "\u5317\u4eacabc" | perl -MEncode -pe 's/\\u([0-9a-fA-F]{4})/encode("utf8", pack("U", hex($1)))/eg' 北京abc
初学者,不知道如何改成函数。
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
HuntXu,
能给改成函数吗,初学者,看不懂
能给改成函数吗,初学者,看不懂
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: 字符串格式转换
代码: 全选
>>> a = "\u5317\u4eacabc"
>>> print a.decode('unicode-escape').encode("utf-8")
北京abc
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
oneleaf,
用print是成功了。但我将经过转化的字符串用logging打印下来后,就还是错误的。
用print是成功了。但我将经过转化的字符串用logging打印下来后,就还是错误的。
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: 字符串格式转换
如何错误?文件的编码是什么?
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
oneleaf,
打印下来的内容为:
文档编码格式为:utf-8
打印下来的内容为:
代码: 全选
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
- oneleaf
- 论坛管理员
- 帖子: 10441
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
Re: 字符串格式转换
试试:
直接写入 a.decode('unicode-escape')
直接写入 a.decode('unicode-escape')
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
oneleaf,
能试的都试了一遍了。
现在就是在想为啥 print就可以。
刚才发现了这么个有意思的事:
后来又试了试 \u00开头的字符,都能够正常输出。但其他开头的unicode字符,就输出又问题。
能试的都试了一遍了。
现在就是在想为啥 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
英
>>>
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
d313206775, oneleaf,
后来仔细比对了下,只有原来是ASCII码对应的那些字符,转化为unicode编码后,最后才会显示成功。其他字符则最终会转化失败。
后来仔细比对了下,只有原来是ASCII码对应的那些字符,转化为unicode编码后,最后才会显示成功。其他字符则最终会转化失败。
- b33e
- 帖子: 3864
- 注册时间: 2011-06-07 14:20
- 系统: Mint18
Re: 字符串格式转换
python3:
代码: 全选
In [1]: a=bytes(u'\u5317\u4eacabc','utf-8').decode('utf-8')
In [2]: a
Out[2]: '北京abc'
-
- 帖子: 15
- 注册时间: 2016-12-12 14:30
- 系统: ubuntu 14.04
Re: 字符串格式转换
b33e,
我用的是python2.7,没有bytes函数。另外,我的字符串格式为:'\u5317\u4eacabc',不是u'\u5317\u4eacabc',前面不带u
我用的是python2.7,没有bytes函数。另外,我的字符串格式为:'\u5317\u4eacabc',不是u'\u5317\u4eacabc',前面不带u