【问题标题】:problem opening a text document - unicode error打开文本文档时出现问题 - unicode 错误
【发布时间】:2010-10-21 03:44:57
【问题描述】:

我可能有相当简单的问题。然而,我刚刚开始使用 python,它让我发疯。我按照一本书的说明,想打开一个简单的文本文件。 我正在使用的代码:

import sys
try:
 d = open("p0901aus.txt" , "W")
except:
 print("Unsucessfull")
 sys.exit(0)

我要么收到消息,即我打开文档失败,要么弹出窗口显示:

(unicode eror) 'unicodeescape' 编解码器无法解码位置 2-4 中的字节:截断 \UXXXXXXXX 转义

我不知道问题是什么。我尝试将文档保存在不同的代码中,尝试了不同的路径...总是同样的问题

有人知道有什么帮助吗?

非常感谢您,

乔治 ps:我用的是windows vista

【问题讨论】:

  • 弹出窗口出现?你在用什么软件吗?
  • 我正在使用 python 3,这是我从 python 书的 cd 获得的

标签: python unicode


【解决方案1】:

(unicode eror) 'unicodeescape' 编解码器无法解码位置 2-4 中的字节:截断 \UXXXXXXXX 转义

这可能意味着您尝试读取的文件不是 open() 期望的编码。显然 open() 需要一些 Unicode 编码(很可能是 UTF-8 或 UTF-16),但您的文件不是这样编码的。

通常不应使用普通的 open() 来读取文本文件,因为如果不指定编码,就不可能正确读取文本文件(除非它是纯 ASCII)。

改用编解码器:

import codecs
fileObj = codecs.open( "someFile", "r", "utf-8" )
u = fileObj.read() # Returns a Unicode string from the UTF-8 bytes in the file

【讨论】:

  • open() 不理解编码cookie吗?
  • 如果我尝试你的代码,什么都没有发生。但至少没有返回错误信息。
  • tlholaday:什么是“编码 cookie”?
  • georg:代码确实读取了文件,但实际上并没有对它做任何事情!
  • @tlholaday:这就是所谓的“BOM”。 ;-)
【解决方案2】:

改成

# for Python 2.5+
import sys
try:
   d = open("p0901aus.txt","w")
except Exception, ex:
   print "Unsuccessful."
   print ex
   sys.exit(0)

# for Python 3
import sys
import codecs
try:
  d = codecs.open("p0901aus.txt","w","utf-8")
except Exception as ex:
  print("Unsuccessful.")
  print(ex)
  sys.exit(0)

W 区分大小写。我不想一次用所有的 Python 语法来打击你,但知道如何显示引发的异常对你很有用,这是一种方法。

另外,您打开文件是为了写入,而不是读取。这是你想要的吗?

如果已经有一个名为 p0901aus.txt 的文档,并且您想阅读它,请执行以下操作:

#for Python 2.5+
import sys
try:
   d = open("p0901aus.txt","r")
   print "Awesome, I opened p0901aus.txt.  Here is what I found there:"
   for l in d:
      print l
except Exception, ex:
   print "Unsuccessful."
   print ex
   sys.exit(0)

#for Python 3+
import sys
import codecs
try:
   d = codecs.open("p0901aus.txt","r","utf-8")
   print "Awesome, I opened p0901aus.txt.  Here is what I found there:"
   for l in d:
      print(l)
except Exception, ex:
   print("Unsuccessful.")
   print(ex)
   sys.exit(0)

当然,您也可以使用 Python 2.5 中的编解码器,如果这样做,您的代码质量会更高(“正确”)。 Python 3 似乎将字节顺序标记视为介于好奇心和线路噪音之间的东西,这真是令人讨厌。

【讨论】:

  • 很遗憾没有帮助,程序似乎无法打开文档。我可以尝试其他代码吗?欢呼
  • 我收到一条语法错误消息。 Exception 后面的逗号好像有问题
  • 你运行的是什么版本的 Python?在命令行中输入“python --version”即可查看。
  • 我使用的是 3.0,我尝试使用旧版本并且您的示例有效,但现在我书中的其余示例都失败了。您是否有机会知道如何在 python 3.0 中解决该问题,或者您是否建议我使用旧版本?谢谢你的帮助
  • 我添加了 3.0 版本,修改了 print 和 Exception 的语法。我也包括了 sleske 回答中的编解码器内容。
【解决方案3】:
import csv

data = csv.reader(open('c:\x\list.csv' ))

for row in data:

    print(row)

print('ready')

弹出“(unicode error)'unicodeescape'编解码器无法解码位置2-4的字节:截断\xXX转义”

尝试c:\\x\\list.csv 而不是c:\x\list.csv

这是 Python 3 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-27
    • 2010-10-11
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多