ntpath join(path, *paths) 发生UnicodeDecodeError的Bug的解决方案

  最近在学习用Python开发web,使用的是web框架,在win8.1平台下安装SAE和Flask的时候总是在ntpath.py这个UnicodeDecodeError模块报错。

84行 result_path = result_path+ p_path

  显示的错误就是UnicodeDecodeError ascii/unicode can not decode 0xc3 range 128的错误。在安装SAE的时候也遇到这个错误了,找到错误的原因是我的User名是中文,中文unicode码是\xc3\xf8。

  Unicode码encode的时候把这个路径名强制认为是两个ascii码,不能超过128所以导致了这个错误。

  这时候我想使用unicode()强制将两个字符串转为unicode也可不可以呢,还是不行,因为unicode()的操作是将ascill扩展为unicode码,同样会验证是否是有效的asill码,还是报了UnicodeDecodeError的错误unicode can not decode 0xc3 range 128。

  result_path = unicode(result_path) + unicode(p_path)

  这时候我就想到怎么不让它验证呢,试了下str()这个函数将两个码全都转为str类型

  result_path = str(result_path) + str(p_path)

  这个时候错误就没有出现,工作正常,因为将unicode码转为str类型不会验证ascill码,而是会将其转为两个八位的char(只是说法,py没有char类型)

  

  >>> a='你好'
  >>> a[0]
  '\xc4'

  >>> a
  '\xc4\xe3\xba\xc3'
  >>> type(a)
  <type 'str'>

 

  在遇到unicode码和str型合并操作的时候可以强制都转为str型进行合并就没有类似的错误了。

  解决方式就是在C:\Python27\Lib\ntpath.py 打开将84行result_path = result_path+ p_path替换为result_path = str(result_path) + str(p_path)

posted @ 2014-07-20 22:23  stupidhod  阅读(2208)  评论(0编辑  收藏  举报