subprocess.check_output中的unicode变量问题使用Django的Python

时间:2015-06-13 15:40:54

标签: java python django unicode utf-8

最近在我的工作中我们带了一台服务器并对其进行了配置。它只是为了语境化。现在的问题是我使用Java编写代码(Cogroo,葡萄牙语语法检查器),我们在Python中有一些代码,使两个代码一起工作我在Python代码中调用jar文件。当我在我的本地机器上工作时,一切正常,当我放入服务器时有一些麻烦。

>>> a = u"ele anda à cavalo"
>>> print(type(a))
>>> <type 'unicode'>
>>> a
u'ele anda \xe0 cavalo'
>>> print(a)
ele anda à cavalo

在我的本地机器和服务器终端上它工作正常,但如果我在Python脚本上执行相同操作,它会给我带来一个错误,例如“ascii”编解码器无法编码字符u'\ xe0'print python“。在脚本中我甚至无法打印unicode字符串。当我尝试调用output = subprocess.check_output(cd.encode("utf-8"), shell=True) var cd时,java代码和路径cd = 'java -jar path/file.jar GrammarChecker -country br -lang pt -text "' + auxTextPure + '"' var auxTextPure总是一个unicode字符串。

看看这两个问题,第一个是var auxTextPure是没有特殊字符的字符串,如 A menino ,它返回的输出类似于 Os determinantes concordam em n ?mero(singular ou plural)e em g?nero(masculino ou feminino)com o substantivo a que se referem。,我需要输出带有重音,第二个错误是当使用带有重音的字符串时 Eleandaàcavalo它带来了这个输出 Verifique一个重复的de palavras。但正确的输出是 O sinal indicativo de crase indica que temos“a” +“a”expressos emumó“à”。 Somente ocorre crasequandoáencontrodepreposição“a”com artigo ou pronome demonstrativo“a”/“as”。 Portanto,nãocorrecrase antes de palavras masculinas。随着重音,我知道问题是因为服务器上的Python或django以及特定的脚本无法翻译unicode(UTF-8)并打印在屏幕甚至变量。我尝试制作cd.encode("utf-8") auxTextPure.encode("utf-8") auxTextPure.decode("utf-8")和其他一些代码,例如import codecs并使用此编解码器,我尝试在互联网上找到这个问题,但在任何地方我都可以找到解决方法,有人可以帮我吗?非常感谢,抱歉我的英语不好。 LeandroCostaValadão。

1 个答案:

答案 0 :(得分:-2)

首先应将字符串解码为UTF-8然后编码,反之亦然。你永远不知道最初编码或解码的字符串。

1

a = u"ele anda à cavalo"
print a.encode('UTF-8')

ele anda à cavalo

2

a = u"ele anda à cavalo"
print a.decode('UTF-8')

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 9: ordinal not in range(128)

3

a = u"ele anda à cavalo"
print a.encode('UTF-8').decode('UTF-8')

ele anda à cavalo

4

a = u"ele anda à cavalo"
print a.encode('UTF-8').decode('UTF-8').encode('UTF-8')

ele anda à cavalo

好笑,不是吗?