Python rpy2.robjects遇到非ASCII字符问题

时间:2017-08-31 10:20:44

标签: python r utf-8 decoding rpy2

我是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,如果这样可以增加问题的清晰度。

0 个答案:

没有答案