我是Python的新手,在使用非ASCII字符(例如德语Umlaute'ä,ö,ü')时遇到了一些麻烦。 我有以下测试设置:
Python(版本:3.6)脚本,它通过rpy2.robjects调用R(版本:3.4.1)脚本:
Python脚本:
#!/Python/python
# -*- coding: utf-8 -*-
# Set environment variables
import os
os.environ['PYTHONHOME'] = 'C:/Python'
os.environ['PYTHONPATH'] = 'C:/Python/lib/site-packages'
os.environ['R_HOME'] = 'C:/Program Files/R/R-3.4.1'
os.environ['R_USER'] = 'C:/Python/Lib/site-packages/rpy2'
# Import modules
import rpy2.robjects as robjects
# Call R script
robjects.r('''source('C:/Apache24/htdocs/Test/RScripts/Test.R')''')
# Get R variables
rpyNor = robjects.r['normal']
rpyUml = robjects.r['umlaute']
pyUml = 'äöü'
print('Normal:', rpyNor[0])
print('Umlaute:', rpyUml)
print('PyUml:', pyUml)
R脚本:
normal <- "aou"
umlaute <- "äöü"
现在我的Python脚本产生以下输出:
Normal: aou
Umlaute: [1] "äöü"
PyUml: äöü
但我无法访问rpyUml[0]
对象以摆脱输出中不需要的 [1]“äöü”部分。当我print(rpyUml[0])
时,它只会引发解码错误。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 0: invalid continuation byte
我不明白这里的问题是什么。我以为我的脚本第二行-*- coding: utf-8 -*-
覆盖了它?
<小时/> 奖金问题:
我正在使用eclipse pydev,当到达语句调用R脚本然后抛出解码错误时,脚本将无法在pydev控制台中正常运行。有没有办法让它逐行执行,而不仅仅是整个脚本?显然,脚本可以作为一个整体运行,因为开头有-*- coding: utf-8 -*-
语句,但是在逐行执行时不适用。如果能做到这一点会很棒。
<小时/> 顺便说一句,我正在使用Windows Server 2012 R2,如果这样可以增加问题的清晰度。