2016-12-08 3 views
2

ある環境から文字列を取得し、別の環境で文字列を再現するコードがあります。私はPython 3.5を使用しています。私はこの種のエラーに遭遇し続けます:strをラテン1からutf-8まで任意に符号化します

UnicodeEncodeError: 'latin-1' codec can't encode character '\u2013' in position 112: Body ('–') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.

...私はそれを避けたいと思います。このエラーは要求モジュールから発生しています。問題は、文字通り何万もの文字列を処理しており、新しい文字列が常に追加されていることです。人々はExcelなどで切り取って貼り付けていますが、どの文字が浮かび上がるのかわからないので、str.replace()を実行するだけではありません。環境2に送信する前に環境1から取得したすべての文字列が正しくutf-8でエンコードされていることを確認したいと思います。

私はstr('yadayada').encode('utf-8).decode('utf-8)を試しましたが、うまくいかなかった。私はstr('yadaya', 'utf-8')を試したが、うまくいかなかった。私は"# -*- coding: UTF-8 -*-"と宣言しようとしたが動作しませんでした。

+0

あなたがそれらを受け取ったとき? – themistoklik

+0

私はポストで言ったことを試しました:私は 'yadayada'.encode(' utf-8).decode( 'utf-8)を試しましたが、うまくいきませんでした。私はstr( 'yadaya'、 'utf-8')を試しましたが、うまくいきませんでした。私は "# - * - coding:UTF-8 - * - "を宣言しようとしましたが、うまくいきませんでした。私はサーバーへの呼び出しから文字列を取得するので、私はちょうどオブジェクトを取得しています。そのオブジェクトには名前属性があり、それがオブジェクトから取得しているものです。しかし、私はその名前属性の価値が何であるか、そしてオブジェクトを作っている人々が電子メール、Excelなどからこれらの名前を切り取って貼り付ける非技術的な人々に過ぎないかどうかは制御できません。 –

答えて

0

投稿の最初のエラーメッセージによると、(a)ユニコード文字列(他の文字には\ u2013を含む)と(b)をLatin-1としてエンコードしようとしています。 (a)良いです。 (b)が悪い場合は、utf-8としてエンコードする必要があります。

だから、あなたが送信するために必要なもの

input_data.encode('utf-8') 

でも、不要なまたは偽の入力に問題があるようです。これは、エンコードを手にして修正できるものではありません。おそらく、削除と置換の辞書を維持する必要があります。これには、管理援助が必要です。データベースへの最初の入力時に実行する必要があります。

ところで、ラテン1でエンコードされたデータは現実世界には存在しません。レガシーデータで作業する必要がある場合はlatin1の代わりにwindows-1252などを使用してデコードします。

0

私は、Pythonの専門家から遠く離れていますが、:str('yadayada').encode('utf-8).decode('utf-8) に構文エラーが含まれている、

終値が「< ==が正常に動作しますstr('yadayada').encode('utf-8').decode('utf-8') ==心あなたは、彼らはすべてのutf8していることを確認するために行う何

+0

ありがとうございますが、おそらく単にタイプミスで、あなたの答えはコメントでなければなりません(あなたがより評判のポイントを持っている場合は、 – goto

関連する問題