python 2.7的字符串编码问题

时间:2023-01-03 23:40:52

【如何计算汉字字符串的长度】

  s=u"我的"

  len(s)=2
  print(s.encode('utf-8')) # utf-8环境汉字长度是以字为单位,print的时候必须编码为非unicode字符

【unicode字符】

  unichr(11) # 将十进制的11转换为unicode字符 u'\0x0b',调试状态下 其作为dict的value显示空格,作为key时显示u'\0x0b'。

【print中文】

  print str(u'你们') # 错误, str函数适用于非unicode,比如str('你们')
  print u'你们' # 非控制台下面错误,print用ascii转换unicode,必须先以utf8编码,即 print(u'你们'.encode('utf8'))
  >> print u'你们' # 控制台下面是正确的,原因未知,但是可以肯定的时候在控制台python是用utf8进行转码

【如何在代码中直接打印unicode】

  print u'你们' + unicode('我的', encoding='utf8') # 中文必须先转换unicode之后串接

  或者


  reload(sys)
  sys.setdefaultencoding("utf-8") # python默认是以ascii进行编解码,跟"coding: UTF-8 "头无关
  print u'你们' + '我的' # 这样就可以混合串接打印,python会自动以utf-8编码方式先将"我的"转unicode,后一起encode
 
  所以在python2.7中,setdefaultencoding()非常重要,可以避免很多编码错误。

【coding: UTF-8文件头】

  没有文件头的时候 a=u'我' 显示乱码,print '我' 正常;所以暂时来看主要影响unicode,当然可能也跟运行的操作系统环境有关。