Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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:UnicodeCoderror with codecs.open_Python_Encoding_Utf 8_Org Mode - Fatal编程技术网

Python:UnicodeCoderror with codecs.open

Python:UnicodeCoderror with codecs.open,python,encoding,utf-8,org-mode,Python,Encoding,Utf 8,Org Mode,我正在尝试使用orgnode.py()解析org文件。这些文件是英语/波斯语的,使用file-i似乎是utf-8编码的。但我在使用makelist函数(它本身使用codec.open和utf-8)时遇到了这个错误: org.makelist(“toread.org”) [** [[http://www.apa.org/helpcenter/sexual-orientation.aspx][性取向、同性恋和双性恋]]:探路者: 新增:[2013-11-06星期三] , ** [[http://

我正在尝试使用orgnode.py()解析org文件。这些文件是英语/波斯语的,使用
file-i
似乎是utf-8编码的。但我在使用makelist函数(它本身使用codec.open和utf-8)时遇到了这个错误:

org.makelist(“toread.org”) [** [[http://www.apa.org/helpcenter/sexual-orientation.aspx][性取向、同性恋和双性恋]]:探路者: 新增:[2013-11-06星期三] , ** [[http://stackoverflow.com/questions/11384516/how-to-make-all-org-files-under-a-folder-added-in-agenda-list-automatically][emacs-如何将文件夹下的所有组织文件自动添加到议程列表中?-堆栈溢出]] (setq org议程文本搜索额外文件(议程档案“~/org/subdir/textfile1.txt”“~/org/subdir/textfile1.txt”)) 新增:[2013-07-23星期二] ,回溯(最近一次呼叫最后一次): 文件“”,第1行,在 UnicodeEncodeError:“ascii”编解码器无法对位置63-66中的字符进行编码:序号不在范围内(128) 该函数返回组织标题列表,但不显示最后一项(用波斯语编写),而是显示错误。
任何关于如何处理此错误的建议?

正如回溯告诉您的,异常是由您在Python控制台本身(
Orgnode.makelist(“toread.org”)
上输入的语句引起的,而不是在语句求值期间调用的任何函数中

当解释器自动转换语句的返回值以在控制台上显示它时,这是典型的编码错误。显示的文本是对返回值应用
repr()
内置的结果

这里,
makelist
结果的
repr()
是一个
unicode
对象,默认情况下,解释器尝试使用
“ascii”
编解码器将其转换为
str

罪魁祸首是
Orgnode.\uuuuu repr\uuuuu
方法(),该方法返回一个
unicode
对象(因为节点内容已使用
codecs.open
自动解码),尽管
\uuuu repr\uuu
方法通常只返回具有安全(ASCII)字符的字符串

以下是您可以对Orgnode所做的最小更改,作为解决问题的方法:

-- a/Orgnode.py
+++ b/Orgnode.py
@@ -612,4 +612,4 @@ class Orgnode(object):
 # following will output the text used to construct the object
         n = n + "\n" + self.body

-        return n
+        return n.encode('utf-8')
如果您想要只返回ASCII字符的版本,可以使用
'string-escape'
作为编解码器,而不是
'utf-8'


这只是一个快速而肮脏的解决方案。正确的解决方案是重写一个适当的
\uuuuu repr\uuuuuu
方法,并添加
\uuuu str\uuuu
\uuuuu unicode\uuuuuuu
方法,而这个类缺少这些方法。(如果我有时间,我甚至可以自己解决这个问题,因为我对使用Python代码来操作我的组织模式文件非常感兴趣。)

这个错误几乎肯定不是由
编解码器.open()引发的,因为这将是一个解码异常。您有一个编码异常。您可能正在打印unicode值吗?向我们展示您的代码和完整的回溯。我添加了回溯,但不明白
打印unicode值是什么意思
(对不起,我没有回答)。还有什么其他信息需要添加到我的问题中吗?这看起来不像是一个完整的回溯;你能给我们展示一下
Orgnode.makelist()的代码吗
?还有其他原因导致Python将已经读取的Unicode对象编码回ASCII。常见的可疑情况是混合使用Unicode和字节字符串对象、打印或写入常规文件。下面是链接:。这是我得到的所有回溯。有趣的是,它是makelist函数返回的列表中的一个项目。谢谢,这样做了。我很高兴看到Orgnode.py有一个更好的版本。实际上还有一些其他的python解析器用于org文件,但是这个对我来说是最容易理解的。
-- a/Orgnode.py
+++ b/Orgnode.py
@@ -612,4 +612,4 @@ class Orgnode(object):
 # following will output the text used to construct the object
         n = n + "\n" + self.body

-        return n
+        return n.encode('utf-8')