zoukankan      html  css  js  c++  java
  • 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码是xc3xf8。

      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
      'xc4xe3xbaxc3'
      >>> type(a)
      <type 'str'>

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

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

  • 相关阅读:
    bzoj 1013: [JSOI2008]球形空间产生器sphere
    bzoj 1012: [JSOI2008]最大数maxnumber
    bzoj 1010: [HNOI2008]玩具装箱toy
    bzoj 1008: [HNOI2008]越狱
    bzoj 1007: [HNOI2008]水平可见直线
    UVa12105 越大越好
    POJ
    最优点配对问题(紫书)
    Ned 的难题
    UVA
  • 原文地址:https://www.cnblogs.com/stupidhod/p/3857400.html
Copyright © 2011-2022 走看看