UnicodeEncodeError: 'ascii'コーデックは位置20の文字u '\ xa0'をエンコードできません:序数が範囲(128)にありません


1298

(異なるサイトの)異なるWebページからフェッチされたテキストからのUnicode文字の処理に問題があります。BeautifulSoupを使用しています。

問題は、エラーが常に再現できるとは限らないことです。いくつかのページで動作することもあれば、をスローすることでbarfsすることもありUnicodeEncodeErrorます。考えられる限りのことをすべて試しましたが、何らかのUnicode関連のエラーをスローせずに一貫して機能するものは何も見つかりませんでした。

問題の原因となっているコードのセクションの1つを以下に示します。

agent_telno = agent.find('div', 'agent_contact_number')
agent_telno = '' if agent_telno is None else agent_telno.contents[0]
p.agent_info = str(agent_contact + ' ' + agent_telno).strip()

上記のスニペットが実行されたときにSOME文字列で生成されるスタックトレースは次のとおりです。

Traceback (most recent call last):
  File "foobar.py", line 792, in <module>
    p.agent_info = str(agent_contact + ' ' + agent_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

これは、一部のページ(より具体的には、一部のサイトのページ)がエンコードされている一方で、他のページはエンコードされていない可能性があるためと考えられます。すべてのサイトは英国に基づいており、英国での消費を対象としたデータを提供します。したがって、英語以外で書かれたテキストの内部化や処理に関する問題はありません。

私がこの問題を一貫して修正できるように、これを解決する方法について誰かが何かアイデアを持っていますか?


1
あなたはユーザーとしてではなく、開発者は、チェックとして、これらのエラーを取得している場合はserverfault.com/questions/54591/...askubuntu.com/questions/599808/...
それブラジルのガイ

私はこの点を追加しますこのためにonlinegdb.com/online_python_interpreterを使用しないでください。そのインタプリタを使って試してみましたが、Unicode用に正しく構成されていません!常に 'B'の形式で印刷していました\ nnn '' ...私が欲しかったのはギルメットだけでした!VMで試してみたところ、chr()を使用して期待どおりにすぐに機能しました
JGFMK 2018

4
これを試してくださいimport os; import locale; os.environ["PYTHONIOENCODING"] = "utf-8"; myLocale=locale.setlocale(category=locale.LC_ALL, locale="en_GB.UTF-8"); ... print(myText.encode('utf-8', errors='ignore'))
hh

@hhhスニペットを実行しましたNameError:名前 'myText'が定義されていません
KHAN irfan

9
設定しようPYTHONIOENCODINGスクリプトを実行する前に、シェルで:$ export PYTHONIOENCODING=utf8
ノーム・マノス

回答:


1363

Python Unicode HOWTOを読む必要があります。このエラーは最初の例です。

基本的に、strユニコードからエンコードされたテキスト/バイトへの変換に使用を停止します。

代わりに、適切に使用.encode()して文字列をエンコードします。

p.agent_info = u' '.join((agent_contact, agent_telno)).encode('utf-8').strip()

または完全にユニコードで動作します。


23
同意した!私が教えられた大まかな原則は、「ユニコードサンドイッチ」という考え方を使用することです。スクリプトは外部からのバイトを受け入れますが、すべての処理はユニコードで行う必要があります。データを出力する準備が整ったときにのみ、データをバイトに戻す必要があります。
Andbdrew 2012年

256
他の誰かがこれに混乱した場合、私は奇妙なことを発見しました:私の端末はutf-8を使用しており、私printのutf-8文字列はうまく動作します。ただし、プログラム出力をファイルにパイプすると、がスローされますUnicodeEncodeError。実際、出力が(ファイルまたはパイプに)リダイレクトされると、それsys.stdout.encodingNone!タック.encode('utf-8')することで問題は解決します。
drevicko

93
@drevicko:PYTHONIOENCODING=utf-8代わりに使用します。つまり、Unicode文字列を出力し、環境に期待されるエンコーディングを設定させます。
jfs 2013

1
@steinar:どの場合も有効なものはありません。一般に、ユーザーはPythonを使用してユーティリティを実装することを気にする必要はありません(何らかの理由で別の言語で再実装することを決定した場合でもインターフェイスは変更されません)。したがって、ユーザーはpython-特定の環境変数。ユーザーに文字エンコーディングの指定を強制するのは悪いUIです。必要に応じて、レポート形式に文字エンコードを埋め込みます。注:一般的なケースでは、ハードコードされたエンコーディングを「実用的なデフォルト」にすることはできません。
jfs '25年

13
これは悪くて混乱するアドバイスです。strを使用する理由は、オブジェクトがまだ文字列ではないため.encode()、呼び出すメソッドがないためです。
Cerin、

434

これは、古典的なpython unicodeの問題点です!以下を検討してください。

a = u'bats\u00E0'
print a
 => batsà

これまでのところすべて良好ですが、str(a)を呼び出した場合、何が起こるか見てみましょう。

str(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 4: ordinal not in range(128)

ああディップ、それは誰にも良いことをするつもりはない!エラーを修正するには、バイトを.encodeで明示的にエンコードし、使用するコーデックをpythonに指示します。

a.encode('utf-8')
 => 'bats\xc3\xa0'
print a.encode('utf-8')
 => batsà

ボイル\ u00E0!

問題は、str()を呼び出すと、Pythonがデフォルトの文字エンコーディングを使用して、指定したバイトをエンコードしようとすることです。この場合、Unicode文字の表現になることがあります。問題を修正するには、.encode( 'whatever_unicode')を使用して、指定した文字列を処理する方法をPythonに指示する必要があります。ほとんどの場合、utf-8を使用すれば大丈夫です。

このトピックに関する優れた解説については、Ned BatchelderのPyCon講演をここで参照してください。http//nedbatchelder.com/text/unipain.html


85
個人的な注意:「.encode」と入力しようとするときに、「。unicode」と誤って入力しないでください。何も機能しないのはなぜですか。
Huffmanの

9
いいアドバイス。しかし、文字列である場合とそうでない場合があるオブジェクトを印刷するためにstr(x)を使用していた場合、代わりに何をしますか?str(x)は、xが数値、日時、ブール値、または通常の文字列の場合に機能します。突然、Unicodeの場合、機能しなくなります。同じ動作をする方法はありますか、またはオブジェクトが.encodeを使用するために文字列であるかどうかをテストするためにIFチェックを追加する必要があり、そうでなければstr()ですか?
Dirk R

同じ質問をNone価値のある質問ですることができます。
Vadorequest

210

記号を削除し、次のように文字列を文字列として保持し続けるエレガントな回避策を見つけました。

yourstring = yourstring.encode('ascii', 'ignore').decode('ascii')

ここに示すように、ignoreオプションを使用すると、それを使用するコードからユニコード(および国際化対応)のサポートが暗黙的に削除されるため、ignoreオプションの使用は危険であることに注意してください(ユニコードの変換)。

>>> u'City: Malmö'.encode('ascii', 'ignore').decode('ascii')
'City: Malm'

17
あなたは私の日を作りました!UTF-8の場合は、それを行うのは十分だ:yourstring = yourstring.encode('utf-8', 'ignore').decode('utf-8')
luca76

私にとってこれはうまくいきましたが、私の場合は異なりました、ファイル名を保存していて、名前に「/」があり、パスが存在しなかったため、.replace( "/"、 "")を使用して保存しました私のスクリプト。asciiを無視する一方で、「utf-8」の場合にも機能します。
Akash Kandpal

1
@ harrypotter0は、ファイルパスを連結するために正しく使用しos.path.join()ます。クロスプラットフォームプログラミングを開始する場合、これは非常に良い習慣です。:)
login_not_failed

152

よく私はすべてを試しましたが、役に立ちませんでした。周りをグーグルで調べた後、私は次のことを理解し、それが助けになりました。Python 2.7が使用されています。

# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

7
これを行わないでください。stackoverflow.com/questions/3828723/…、ただし、このstackoverflow.com/a/31137935/2141635のような回答がある場合、エラーを検索すると、結果の上部近くにあるので、なぜそれが良い考えのように見えるかがわかります。
Padraic Cunningham 2016

21
私はこのトピックのほとんどすべての提案を試しましたが、実際にはどれもうまくいきませんでした。最後にこれを試しました。そして、それは本当にシンプルで良かった唯一のものです。誰かが言うには、「これをしない場合は、シンプルなソリューションが付属していそうでない場合は、このいずれかを使用し、それは良い作業コピーと過去のソリューションですので。。。
リチャード・デ・リー

4
これはどのようにpython3で実行できますか?よろしくお願いします。
カネルバピーター2018

3
そんなに欲求不満の後、これはうまくいきました。本当にありがとう。
Avraham Zhurba

4
追加したいのはif sys.version_info.major < 3:
ファルケン教授の契約が

87

印刷さえも失敗させる微妙な問題は、環境変数の設定が間違っていることです。ここでLC_ALLは "C"に設定されています。Debianでは、設定を推奨していません:ロケールのDebian wiki

$ echo $LANG
en_US.utf8
$ echo $LC_ALL 
C
$ python -c "print (u'voil\u00e0')"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 4: ordinal not in range(128)
$ export LC_ALL='en_US.utf8'
$ python -c "print (u'voil\u00e0')"
voilà
$ unset LC_ALL
$ python -c "print (u'voil\u00e0')"
voilà

まったく同じ問題が発生したため、報告する前に確認しませんでした。どうもありがとう。ちなみに、最初の2つのコマンドをに置き換えることができますenv|grep -E '(LC|LANG)'
ドミトリーヴェルホトゥロフ2015

間違ったエンコーディングの問題で私の2セント。私mcは「サブシェルモード」(Ctrl-O)で頻繁に使用していますが、bashに次のエイリアスを追加したことを忘れていましたalias mc="LANG=en_EN.UTF-8 mc"。そのため、ru_RU.UTF-8内部的に依存している不十分に記述されたスクリプトを実行しようとすると、スクリプトが停止します。私が本当の問題を発見する前に、このスレッドからたくさんのものを試してみました。:)
login_not_failed

あなたは素晴らしいです。GSUTILでは、この問題が原因でrsyncが失敗していました。LC_ALLが修正され、すべてがワインとして正常に動作するようになりました。<3 THANK YOU <3
dsignr

27

私にとって、うまくいったのは:

BeautifulSoup(html_text,from_encoding="utf-8")

これが誰かを助けることを願っています。


25

実際のところ、ほとんどの場合、これらの文字を取り除くだけのほうがはるかに簡単です。

s = mystring.decode('ascii', 'ignore')

26
「完全に」は通常、それが実行するものではありません。それはあなたが適切に対処する方法を理解する必要があるものを捨てます。
tripleee 2014

7
Pythonはすべての言語をサポートする必要があるため、「これらの」(英語以外の)文字を取り除くだけでは解決策にはなりません。
alemol

8
反対投票。これはまったく正しい解決策ではありません。Unicodeの操作方法を学ぶ:joelonsoftware.com/articles/Unicode.html
Andrew Ferrier

4
見て、この特定の答えを提示する最も賢明な方法はこのようにすることです:asciiが特定の言語とユーザーに特定の特権を与えることを認識する-これは、大まかな最初のパスをハッキングしている可能性があるユーザーに悪用される可能性があるエスケープハッチです、完全なUnicodeサポートが実装される前の予備作業のために潜在的に一緒にスクリプトを作成します。
lol

5
会社の社内アプリケーションでstdoutに英語のテキストを印刷するだけのスクリプトを書いている場合は、問題を解決したいだけです。機能するものは何でも。
kagronick

25

問題は、ユニコード文字を印刷しようとしているが、お使いの端末がそれをサポートしていないことです。

あなたはlanguage-pack-enそれを修正するためにパッケージをインストールしてみることができます:

sudo apt-get install language-pack-en

サポートされているすべてのパッケージ(Pythonを含む)の英語翻訳データの更新を提供します。必要に応じて、異なる言語パッケージをインストールします(印刷しようとしている文字によって異なります)。

一部のLinuxディストリビューションでは、デフォルトの英語ロケールが正しく設定されていることを確認する必要があります(そのため、Unicode文字をシェル/ターミナルで処理できます)。手動で構成するよりも、インストールする方が簡単な場合があります。

次に、コードを記述するときは、コードで正しいエンコーディングを使用していることを確認してください。

例えば:

open(foo, encoding='utf-8')

それでも問題が解決しない場合は、次のようなシステム構成を再確認してください。

  • ロケールファイル(/etc/default/locale)、たとえば

    LANG="en_US.UTF-8"
    LC_ALL="en_US.UTF-8"

    または:

    LC_ALL=C.UTF-8
    LANG=C.UTF-8
  • シェル内のLANG/の値LC_CTYPE

  • シェルがサポートするロケールを次の方法で確認します。

    locale -a | grep "UTF-8"

新しいVMでの問題と解決策のデモ。

  1. VMを初期化してプロビジョニングします(例:を使用vagrant):

    vagrant init ubuntu/trusty64; vagrant up; vagrant ssh

    参照:利用可能なUbuntuボックス

  2. Unicode文字の印刷(などの商標記号):

    $ python -c 'print(u"\u2122");'
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 0: ordinal not in range(128)
  3. インストールしていlanguage-pack-enます:

    $ sudo apt-get -y install language-pack-en
    The following extra packages will be installed:
      language-pack-en-base
    Generating locales...
      en_GB.UTF-8... /usr/sbin/locale-gen: done
    Generation complete.
  4. 今問題は解決されるべきです:

    $ python -c 'print(u"\u2122");'
    
  5. それ以外の場合は、次のコマンドを試してください。

    $ LC_ALL=C.UTF-8 python -c 'print(u"\u2122");'
    

1
language-pack-enPythonやこの質問とは何が関係していますか?AFAIK、それはメッセージに言語翻訳を提供するかもしれませんが、エンコーディングとは何の関係もありません
Alastair McCormack

2
一部のLinuxディストリビューションでは、特にターミナルでPythonスクリプトを実行するときに、デフォルトの英語ロケールが適切に設定されていることを確認する必要があります。ある時点で私にはうまくいきました。参照:文字エンコーディング
kenorb

あ、そう。英語以外のロケールを使用したいということですか?ユーザーは/etc/locale.gen、ロケールを使用する前に、ロケールが構築されていることを確認するために編集する必要があると思いますか?
Alastair McCormack

1
@AlastairMcCormack LANGからコメントアウトして/etc/default/locale/etc/locale.gen存在locale-genしないので)実行しましたが、役に立ちませんでした。language-pack-enドキュメントがあまり見つからなかったので、正確に何ができるのかわかりません。ドキュメントの内容をリストしてもあまり役に立ちません。
kenorb

1
デスクトップシステムにutf-8ロケールが存在しない可能性はほとんどありません。つまり、何もインストールする必要がなく、代わりにLANG/ LC_CTYPE/ LC_ALLを構成するだけです(たとえばLANG=C.UTF-8)。
jfs

19

シェルで:

  1. 次のコマンドでサポートされているUTF-8ロケールを見つけます。

    locale -a | grep "UTF-8"
  2. スクリプトを実行する前に、それをエクスポートします。例:

    export LC_ALL=$(locale -a | grep UTF-8)

    または手動で:

    export LC_ALL=C.UTF-8
  3. 特殊文字を印刷してテストします。例

    python -c 'print(u"\u2122");'

上記はUbuntuでテスト済みです。


はい、これが最良の短い回答です。.encodeを使用するようにソースコードを変更することはできません
Luat Nguyen-Neo.Mxn0

16

スクリプトの先頭に(または2行目として)以下の行を追加します。

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

これがpythonソースコードエンコーディングの定義です。詳細はPEP 263をご覧ください。


2
外部ファイルからロードされた処理済みテキストにutf-8エンコーディングが含まれている場合、これは問題を解決しません。これは、指定されたpythonスクリプト自体で記述されたリテラルにのみ役立ち、Pythonインタープリターの手掛かりにすぎませんが、テキスト処理には影響しません。
Mikaelblomkvistsson

16

これは、他のいわゆる「警戒」回答のリハッシュです。ここでの抗議にもかかわらず、問題のある文字/文字列を単に捨てることが良い解決策である状況があります。

def safeStr(obj):
    try: return str(obj)
    except UnicodeEncodeError:
        return obj.encode('ascii', 'ignore').decode('ascii')
    except: return ""

それをテストする:

if __name__ == '__main__': 
    print safeStr( 1 ) 
    print safeStr( "test" ) 
    print u'98\xb0'
    print safeStr( u'98\xb0' )

結果:

1
test
98°
98

提案:toAscii代わりにこの関数に名前を付けることができますか?それは好みの問題です。

これはPython 2用に作成されました。Python3の 場合bytes(obj,"ascii")は、ではなくを使用することをお勧めしますstr(obj)。私はまだこれをテストしていませんが、いつか答えを修正するつもりです。


8

私は常に以下のコードをpythonファイルの最初の2行に配置します。

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

6

シンプルなヘルパー関数はここにあります

def safe_unicode(obj, *args):
    """ return the unicode representation of obj """
    try:
        return unicode(obj, *args)
    except UnicodeDecodeError:
        # obj is byte string
        ascii_text = str(obj).encode('string_escape')
        return unicode(ascii_text)

def safe_str(obj):
    """ return the byte string representation of obj """
    try:
        return str(obj)
    except UnicodeEncodeError:
        # obj is unicode
        return unicode(obj).encode('unicode_escape')

エスケープされたバイト文字列を取得するには(ASCIIエンコーディングを使用して任意のUnicode文字列をバイトに変換するには)、backslashreplaceエラーハンドラを使用しますu'\xa0'.encode('ascii', 'backslashreplace')。そのような表現を避け、代わりに非ASCII文字を受け入れるように環境を構成する必要がありますが、それは2016年です!
jfs

明けましておめでとうございます@JFSebastian。私はPython-Unicodeの問題にイライラし、ついにこのソリューションが機能するようになりました。私はこれについて知りませんでした。とにかく先端をありがとう。
Parag Tyagi 2016年


4

ターミナルを開いて、以下のコマンドを実行してください:

export LC_ALL="en_US.UTF-8"

3

私は以下を使用しました:

import unicodedata
message = unicodedata.normalize("NFKD", message)

ドキュメントがそれについて言っていることを確認してください:

unicodedata.normalize(form、unistr)Unicode文字列unistrの通常のフォーム形式を返します。formの有効な値は、「NFC」、「NFKC」、「NFD」、および「NFKD」です。

Unicode標準では、標準的な同等性と互換性の同等性の定義に基づいて、Unicode文字列のさまざまな正規化形式を定義しています。Unicodeでは、いくつかの文字をさまざまな方法で表現できます。たとえば、文字U + 00C7(ラテン大文字Cとセディラ)は、シーケンスU + 0043(ラテン大文字C)U + 0327(セディラと組み合わせる)として表すこともできます。

各文字には、2つの通常形式があります。通常形式Cと通常形式Dです。通常形式D(NFD)は正準分解とも呼ばれ、各文字をその分解形式に変換します。正規形C(NFC)は、最初に正規分解を適用し、次に事前結合文字を再度構成します。

これら2つの形式に加えて、互換性の同等性に基づく2つの追加の通常形式があります。Unicodeでは、通常は他の文字と統合される特定の文字がサポートされています。たとえば、U + 2160(ローマ数字1)は、U + 0049(ラテン大文字I)と同じです。ただし、既存の文字セット(gb2312など)との互換性のために、Unicodeでサポートされています。

通常の形式のKD(NFKD)は互換性分解を適用します。つまり、すべての互換性文字を同等のものに置き換えます。正規形KC(NFKC)は、最初に互換性分解を適用し、次に正規構成を適用します。

2つのUnicode文字列が正規化され、人間の読者には同じに見えても、一方に結合文字があり、もう一方にない場合、それらは等しく比較されない場合があります。

私のためにそれを解決します。シンプルで簡単。


3

以下の解決策は私にとってうまくいきました、ちょうど追加されました

u「文字列」

(文字列をUnicodeとして表す)私の文字列の前。

result_html = result.to_html(col_space=1, index=False, justify={'right'})

text = u"""
<html>
<body>
<p>
Hello all, <br>
<br>
Here's weekly summary report.  Let me know if you have any questions. <br>
<br>
Data Summary <br>
<br>
<br>
{0}
</p>
<p>Thanks,</p>
<p>Data Team</p>
</body></html>
""".format(result_html)

3

悲しいかな、これは少なくともPython 3で動作します...

Python 3

時々、エラーは環境変数にあり、そのため

import os
import locale
os.environ["PYTHONIOENCODING"] = "utf-8"
myLocale=locale.setlocale(category=locale.LC_ALL, locale="en_GB.UTF-8")
... 
print(myText.encode('utf-8', errors='ignore'))

エンコーディングではエラーは無視されます。


2

私はこの問題を抱えていて、Googleが私をここに導いてくれたので、ここで一般的な解決策に加えて、これは私にとってうまくいったものです:

# 'value' contains the problematic data
unic = u''
unic += value
value = unic

ネッドのプレゼンテーションを読んだ後、私はこのアイデアを思いつきました。

ただし、これが機能する理由を完全に理解しているわけではありません。ですから、誰かがこの回答を編集したり、コメントを書き込んで説明したりできるとしたら、私は感謝します。


3
type価値は何ですか?この前後?これが機能する理由は、文字列とユニコードを追加するのunic += valueと同じa を実行することによりunic = unic + value、Pythonが結果のユニコード、unicつまりより正確な型(これを行うと、フロートa = float(1) + int(1)aなる)を想定し、次に、Unicodeの新しいオブジェクトをvalue = unicポイントvalueunicます。
トムミデルティン2016年

2

manage.py migrateローカライズされたフィクスチャを使用してDjangoで実行すると、このエラーが発生しました。

ソースには# -*- coding: utf-8 -*-宣言が含まれており、MySQLはutf8用に正しく構成されており、Ubuntuには適切な言語パックと値が含まれていました/etc/default/locale

問題は、単にDjangoコンテナー(私たちはdockerを使用しています)にLANGenv 変数が欠落していることでした。

移行を再実行する前にコンテナを設定LANGen_US.UTF-8て再起動すると、問題が修正されました。


1

ここでの多くの回答(@agfや@Andbdrewなど)は、OP質問の最も直接的な側面にすでに対処しています。

しかし、ほとんど無視されている微妙だが重要な側面が1つあると思います。これは、Pythonでエンコーディングを理解しようとしているときに私のようなすべての人にとって非常に重要なことです。文字表現のPython 2とPython 3の管理は大きく異なります。私は、バージョンを意識せずにPythonのエンコーディングについて読んでいる人々と大きな混乱を抱えているように感じます。

OPの問題の根本的な原因を理解したい人は、まずSpolskyの文字表現とUnicode 紹介を読んでから、Python 2とPython 3のUnicodeのBatchelderに進むことをお勧めします。


はい、私のエラーはpython 2.7、 'a'.format(u'ñ')でした。正しい解決策は.encode( 'utf-8')を使用せず、常にunicode文字列を使用することです(python 3のデフォルト) ):u'a'.format(u'ñ ')、
Rogelio

1

変数をstr(variable)に変換しないようにしてください。時々、それは問題を引き起こすかもしれません。

避けるべき簡単なヒント:

try: 
    data=str(data)
except:
    data = data #Don't convert to String

上記の例は、エンコードエラーも解決します。


例外でエラーが発生するため、これは機能しません
Aurele Collinet '10

0

あなたがそのようなものを持っているならpacket_data = "This is data"、初期化直後の次の行でこれを行ってくださいpacket_data

unic = u''
packet_data = unic


0

Unicode文字をに出力する際にstdoutsys.stdout.write印刷ではなくを使用してこの問題を発生させました(別のファイルへの出力もサポートできるようにするため)。

BeautifulSoup自身のドキュメントから、コーデックライブラリでこれを解決しました:

import sys
import codecs

def main(fIn, fOut):
    soup = BeautifulSoup(fIn)
    # Do processing, with data including non-ASCII characters
    fOut.write(unicode(soup))

if __name__ == '__main__':
    with (sys.stdin) as fIn: # Don't think we need codecs.getreader here
        with codecs.getwriter('utf-8')(sys.stdout) as fOut:
            main(fIn, fOut)

0

この問題は、DjangoプロジェクトがApacheを使用してデプロイするときによく発生します。Apacheは/ etc / sysconfig / httpdに環境変数LANG = Cを設定するためです。ファイルを開いて、この設定にコメント(またはフレーバーに変更)してください。または、WSGIDaemonProcessコマンドのlangオプションを使用します。この場合、異なるLANG環境変数を異なる仮想ホストに設定できます。


0

推奨される解決策は私にとってはうまくいきませんでした、そしてすべての非ASCII文字をダンプすることに耐えることができたので、

s = s.encode('ascii',errors='ignore')

これにより、エラーをスローしない、取り除かれたものが残りました。


0

これは動作します:

 >>>print(unicodedata.normalize('NFD', re.sub("[\(\[].*?[\)\]]", "", "bats\xc3\xa0")).encode('ascii', 'ignore'))

出力:

>>>bats
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.