Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';不能在windows中处理字符串_Python_Windows_Python 2.7 - Fatal编程技术网

Python Can';不能在windows中处理字符串

Python Can';不能在windows中处理字符串,python,windows,python-2.7,Python,Windows,Python 2.7,我已经在linux中编写了一个python 2.7代码,它运行得很好 它使用 os.listdir(os.getcwd()) 将文件夹名称作为变量读取,并在以后的某些部分中使用它们 在linux中,我使用简单的转换技巧手动将非asci字符转换为asci字符 str(str(tfile)[0:-4]).replace('\xc4\xb0', 'I').replace("\xc4\x9e", 'G').replace("\xc3\x9c", 'U').replace("\xc3\x87", 'C'

我已经在linux中编写了一个python 2.7代码,它运行得很好

它使用

os.listdir(os.getcwd())
将文件夹名称作为变量读取,并在以后的某些部分中使用它们

在linux中,我使用简单的转换技巧手动将非asci字符转换为asci字符

str(str(tfile)[0:-4]).replace('\xc4\xb0', 'I').replace("\xc4\x9e", 'G').replace("\xc3\x9c", 'U').replace("\xc3\x87", 'C').replace("\xc3\x96", 'O').replace("\xc5\x9e", 'S') ,str(line.split(";")[0]).replace(" ", "").rjust(13, "0"),a)) 
这种方法在windows中失败。我试过了

udata = str(str(str(tfile)[0:-4])).decode("UTF-8")
asci = udata.encode("ascii","ignore")
它也因以下原因而失败

DEM¦-RTEPE # at this string error occured

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1532, in __call__
    return self.func(*args)
  File "C:\Users\benhur.satir\workspace\Soykan\tkinter.py", line 178, in SparisDerle
    udata = str(str(str(tfile)[0:-4])).decode("utf=8")
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa6 in position 3: invalid start byte
如何在windows中处理此类字符


注意:将它们保留为UTF会导致xlswriter模块失败,因此我需要将它们转换为asci。缺少字符是不可取的,但可以接受。

Windows不喜欢UTF8。您可能会获得默认系统编码的文件夹名称,通常是win1252(ISO-8859-1的一个变体)

这就是为什么在文件名中找不到UTF8字符的原因。顺便说一下,异常表示您发现了一个字符code
0xa6
,在win1252编码中,该字符应该是
|

它没有确切说明windows系统上的编码是什么,因为这可能取决于本地化,但它证明了数据不是UTF8编码的。

这如何?
您可以将其用于可选的
.replace()

string
模块中,有一组可以使用的字符

>>> import string
>>> string.digits+string.punctuation
'0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> 
导入字符串 >>>字符串.数字+字符串.标点符号 '0123456789!"#$%&\'()*+,-./:;?@[\\]^_`{|}~' >>>
我不知道用什么替换什么。
os.listdir(os.getcwdu())
(注意“u”)将以unicode字符串的形式列出名称。感谢您解决了所有问题。任何面临相同问题的人,也看看“ftfy”库。将其与os.getcwdu()结合起来,一切都完成了!