4

オンラインサービスで翻訳する漢字を送信し、結果の英語の文字列を返したいのですが。これには単純なJSONとurllibを使用しています。

そして、はい、私は宣言しています。

# -*- coding: utf-8 -*-

私のコードの上に。

urllibに文字列型のオブジェクトをフィードすると、そのオブジェクトにUnicode情報が含まれている場合でも、すべてが正常に機能するようになりました。私の関数はと呼ばれtranslateます。

例えば:

stringtest1 = '無與倫比的美麗'

print translate(stringtest1)

適切な翻訳と実行につながります

type(stringtest1) 

これが文字列オブジェクトであることを確認します。

しかし、もしそうなら

stringtest1 = u'無與倫比的美麗'

翻訳関数を使おうとすると、次のエラーが発生します。

  File "C:\Python27\lib\urllib.py", line 1275, in urlencode
    v = quote_plus(str(v))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-8: ordinal not in range(128)

少し調べてみると、これは一般的な問題のようです。

さて、スクリプトを入力すると

stringtest1 = '無與倫比的美麗' 
stringtest2 = u'無與倫比的美麗'
print 'stringtest1',stringtest1
print 'stringtest2',stringtest2

それの実行は戻ります:

stringtest1 無與倫比的美麗
stringtest2 無與倫比的美麗

ただし、コンソールに変数を入力するだけです。

>>> stringtest1
'\xe7\x84\xa1\xe8\x88\x87\xe5\x80\xab\xe6\xaf\x94\xe7\x9a\x84\xe7\xbe\x8e\xe9\xba\x97'
>>> stringtest2
u'\u7121\u8207\u502b\u6bd4\u7684\u7f8e\u9e97'

私にそれを取得します。

私の問題は、翻訳される情報がどのように私の機能に到達するかを制御できないことです。そして、関数で受け入れられないUnicode形式でそれを持ってくる必要があるようです。

では、どうすればあるものを別のものに変換できますか?

Stack Overflowの質問「UnicodeをPythonの文字列に変換する(余分な記号を含む) 」を読みました。

しかし、これは私が求めているものではありません。Urllibは文字列オブジェクトを受け入れますが、Unicodeオブジェクトは受け入れません。どちらも同じ情報を含みます

まあ、少なくとも私が変更されていない情報を送信しているWebアプリケーションの観点からは、それらがPythonでまだ同等のものであるかどうかはわかりません。

4

1 に答える 1

8

オブジェクトを取得し、unicodeそこから UTF-8 でエンコードされたバイト文字列を返したい場合は、 を使用しますtheobject.encode('utf8')

str着信オブジェクトがかどうかわからないのは奇妙に思えますunicode-- 確かに、その関数の呼び出しサイトも制御しているのですか?! しかし、それが実際に当てはまる場合、何らかの奇妙な理由で、次のようなものが必要になる場合があります。

def ensureutf8(s):
    if isinstance(s, unicode):
        s = s.encode('utf8')
    return s

つまり、受信したオブジェクトが既にバイト文字列である場合ではなく、Unicode オブジェクトを受信した場合にのみエンコードされます。どちらの場合もバイト文字列を返します。

ところで、あなたの混乱の一部は、インタープリタープロンプトで式を入力するだけでその が表示されることを知らないという事実によるようですrepr;-) print

于 2010-09-08T15:52:45.220 に答える