2017-10-16 15 views
1

私はファイルに保存できる'\n'.join(self.product.features)という文字列にPythonの文字列リストを結合しようとしています。リストは次のようになります。Pythonは文字 ' u3010'を位置0にエンコードできません:<undefined>

[ 
    "【SIX IN ONE】This digital radio alarm clock combines 6 functions: Digital clock 12/24 Hour Format for checking time; dual alarm clock with individual alarm volume control for awaking you up and you can adjust the alarm volume level; FM radio for listening to news& weather forecast; auto brightness & 3 steps dimmer control for eyes care; USB charging port for mobile device and easy to charge your phone near bedside; 3.5 mm jack (not included) for external audio source.", 
    "【LARGE BRIGHT DISPLAY】Large 1.4-inch Cyan Blue LED display without any blink makes time easy to read from a far distance, auto brightness & 3 steps dimmer control for eyes caring, auto set the display to a brighter setting in daytime and softer one at night.", 
    "【AUTO TIME SET】 Once you plugged this radio alarm clock to the AC Outlet, default EST time will be displayed. DST (Daylight Saving Time) will be switching automatically, Simple Time Zone Alignment (Press and hold SET button then adjust the Hour by Tune Up or Down), Backup Battery to maintain Time and Alarm Setting.", 
    "【SUITABLE FOR HOME&OFFICE】You can place this radio alarm clock on bedside table; Office desk; kitchen; study table or cabinet at sitting room - Need to connect to main power.", 
    "【30 DAYS MONEY BACK GUARANTEE】Please feel free to contact us if you have any questions on this radio alarm clock and you can buy with confidence at any time thanks to our 30-day money back guarantee." 
] 

これは、文字列に参加して保存しようとする私のコードです。

エラーが発生しています。

UnicodeEncodeError: 'charmap' codec can't encode character '\u3010' in position 0: character maps to <undefined> 

私はいくつかの文字が、私はちょうど/エンコードまたはバイパス、それを復号化するために、この場合には、それを使用するかどうかはわからないデコードすることができなかったことがわかります。

+1

だけセットエンコーディング名を(例えば、 'UTF-8')デフォルトでは、Pythonはシステムエンコーディングを使用します –

+0

'txtfile = open(self.productDir +" \\ Product Details.txt "、" w + "、encoding =" utf-8 ")' – LogicDev

+0

また、 'with'建設、それはあなたの質問に接続されていませんが、コードはより明確になります。 - http://www.pythonforbeginners.com/files/with-statement-in-python –

答えて

0

パスをバックスラッシュ(\)で書いたので、私はあなたがWindowsを使用していると仮定します。 Windowsのコマンドラインインターフェイス(いわゆるコンソールの)では、エンコーディングは現在cp1252(またはその他の8ビットエンコーディング)です。文字U + 3010(LEFT BLACK LENTICULAR BRACKET)は、cp1252文字セットには存在しません(Windowsでは共通の8ビット文字セットでも終了しない可能性があります)。

回避策:前後にマップできない文字を無視して

  • 変換 - 括弧が消え...

    charset = 'ascii' 
    txt = '\n'.join(self.product.features).encode(charset, 'ignore').decode(charset) 
    txtfile.write(txt) 
    
  • が賢明同等で文字を怒ら置き換える - 括弧は(として表示され、 )他のマッピング不可能な文字が存在する場合、文字列は

    txt = '\n'.join(self.product.features).replace('\u3010', '(').replace('\u3011', ')') 
    txtfile.write(txt) 
    

最高はあなたシステムが使用されている場合optionnaly cp1252文字セットを使用して、両方を組み合わせることで行うに私見:open関数で

txt = '\n'.join(self.product.features).replace('\u3010', '(').replace('\u3011', ')') 
    charset = 'cp1252' 
    txtfile.write(txt.encode(charset, 'ignore').decode(charset)) 
関連する問題