[解決済み] python 3.2 UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 9629: character maps to <undefined>.
2023-05-01 04:57:38
質問
sqlite3データベースからデータを取得するスクリプトを作ろうとしているのですが、問題が発生しました。
データベース内のフィールドはtextタイプで、html形式のテキストが含まれています。
<html>
<head>
<title>Yahoo!</title>
</head>
<body>
<style type="text/css">
html {}
.yshortcuts {border-bottom:none !important;}
.ReadMsgBody {width:100%;}
.ExternalClass{width:100%;}
</style>
<table cellpadding="0" cellspacing="0" bgcolor="#ffffff">
<tr>
<td width="550" valign="top" align="left">
<table cellpadding="0" cellspacing="0" width="500">
<tr>
<td colspan="3"><img src="http://mail.yimg.com/nq/assets/sharedmessages/v1/us/logo.gif" width="292" height="51" style="display:block;" border="0" alt="Yahoo! Mail"></td>
</tr>
<tr>
<td rowspan="3" width="1" bgcolor="#c7c4ca"></td>
<td width="498" height="1" bgcolor="#c7c4ca"></td>
<td rowspan="3" width="1" bgcolor="#c7c4ca"></td>
</tr>
<tr>
<td width="498" valign="top" align="left">
<table cellpadding="0" cellspacing="0">
<tr>
<td width="498" bgcolor="#61399d" align="left" valign="top">
<table cellspacing="0" cellpadding="0"><tr><td height="24"></td></tr></table>
<div style="font-family:Arial, Helvetica, sans-serif;font-size:23px;line-height:27px;margin-bottom:10px;color:#ffffff;margin-left:15px;"><span style="color:#ffffff;text-decoration:none;font-weight:bold;line-height:27px;">Välkommen till Yahoo! Mail.</span></div>
<div style="font-family:Arial, Helvetica, sans-serif;font-size:22px;line-height:26px;margin-bottom:1px;color:#ffffff;margin-left:15px;margin-bottom:7px;margin-right:15px;">Ansluta och dela går snabbt och enkelt och är tillgängligt överallt.</div>
</td>
</tr>
<tr>
<td><img src="http://mail.yimg.com/nq/assets/sharedmessages/v1/all/b1.gif" width="498" height="18" style="display:block;" border="0"></td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" width="498">
<tr>
<td width="292" valign="top">
<table cellpadding="0" cellspacing="0">
<tr>
<td><img src="http://mail.yimg.com/nq/assets/sharedmessages/v1/all/grad.gif" width="292" height="9" style="display:block;"></td>
</tr>
<tr>
<td width="292" bgcolor="#ffffff" align="left" valign="top">
<table cellspacing="0" cellpadding="0"><tr><td height="11"></td></tr></table>
<div style="margin-left:15px;">
<div style="font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:18px;color:#333333;margin-bottom:11px;font-weight:bold;">Det är lätt som en plätt att komma igång.</div>
<table cellpadding="0" cellspacing="0" width="267">
<tr>
<td width="16" align="left" valign="top"><div style="font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:16px;color:#61399d;margin-bottom:9px;font-weight:bold;">1. </div></td>
<td align="left" valign="top"><div style="font-family:Arial, Helvetica, sans-serif;font-size:13px;line-height:16px;color:#61399d;margin-bottom:9px;"><a rel="nofollow" target="_blank" href="http://us-mg999.mail.yahoo.com/neo/launch?action=contacts" style="text-decoration:underline;color:#61399d;"><span>Lägg till alla dina kontakter på en plats</span></a>.</div></td>
</tr>
<tr>
<td align="left" valign="top"><div style="font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:16px;color:#61399d;margin-bottom:9px;font-weight:bold;">2. </div></td>
<td align="left" valign="top"><div style="font-family:Arial, Helvetica, sans-serif;font-size:13px;line-height:16px;color:#61399d;margin-bottom:9px;"><a rel="nofollow" target="_blank" href="http://mrd.mail.yahoo.com/themes" style="text-decoration:underline;color:#61399d;"><span>Anpassa din nya inkorg</span></a>.</div></td>
</tr>
<tr>
<td align="left" valign="top"><div style="font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:16px;color:#61399d;margin-bottom:9px;font-weight:bold;">3. </div></td>
<td align="left" valign="top"><div style="font-family:Arial, Helvetica, sans-serif;font-size:13px;line-height:16px;color:#61399d;"><a rel="nofollow" target="_blank" href="http://se.overview.mail.yahoo.com/mobile" style="text-decoration:underline;color:#61399d;"><span>Anslut överallt på dina mobila enheter</span></a>.</div></td>
</tr>
</table>
</div>
</td>
</tr>
<tr><td height="13"></td></tr>
</table>
</td>
<td width="196" valign="top">
<table cellpadding="0" cellspacing="0">
<tr>
<td width="1" bgcolor="#fbfbfd" valign="top"><img src="http://mail.yimg.com/nq/assets/sharedmessages/v1/all/g1.gif" width="1" height="21" style="display:block;"></td>
<td width="1" bgcolor="#f5f6fa" valign="top"><img src="http://mail.yimg.com/nq/assets/sharedmessages/v1/all/g2.gif" width="1" height="21" style="display:block;"></td>
<td width="1" bgcolor="#e8eaf1" valign="top"><img src="http://mail.yimg.com/nq/assets/sharedmessages/v1/all/g3.gif" width="1" height="21" style="display:block;"></td>
<td width="1" bgcolor="#d4d4d4"></td>
<td width="186" bgcolor="#f0f0f0" align="left" valign="top">
<table cellspacing="0" cellpadding="0"><tr><td height="3"> </td></tr></table>
<div style="margin-left:11px;">
<div style="font-family:Arial, Helvetica, sans-serif;font-size:13px;line-height:16px;color:#333333;margin-bottom:9px;"><b>Info för dig:</b></div>
<div style="font-family:Arial, Helvetica, sans-serif;font-size:12px;color:#43494e;line-height:18px;margin-bottom:10px;">
Yahoo!-ID och e-postadress:<br />
<div style="font-family:Arial, Helvetica, sans-serif;font-size:12px;color:#43494e;line-height:18px;">
Håll ditt konto och inställningar aktuella. <br><a rel="nofollow" target="_blank" href="https://edit.yahoo.com/config/eval_profile" style="text-decoration:underline;color:#61399d;"><span>Mitt konto</span></a>
</div>
</div>
<table cellspacing="0" cellpadding="0"><tr><td height="20"></td></tr></table>
</td>
<td width="1" bgcolor="#dbdbdb"></td>
<td width="1" bgcolor="#ced2de"></td>
<td width="1" bgcolor="#dbdfed"></td>
<td width="1" bgcolor="#e8ebf3"></td>
<td width="1" bgcolor="#f3f4f9"></td>
<td width="1" bgcolor="#fafbfc"></td>
</tr>
<tr>
<td colspan="11"><img src="http://mail.yimg.com/nq/assets/sharedmessages/v1/all/b2.gif" width="196" height="8" style="display:block;" border="0"></td>
</tr>
<tr><td height="13"></td></tr>
</table>
</td>
<td width="10"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="498" height="1" bgcolor="#c7c4ca"></td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" width="500">
<tr>
<td align="center" valign="top">
<table cellspacing="0" cellpadding="0"><tr><td height="10"></td></tr></table>
<div style="font-family:Arial, Helvetica, sans-serif;font-size:11px;line-height:18px;margin-bottom:10px;">
<a rel="nofollow" target="_blank" href="http://info.yahoo.com/legal/se/yahoo/utos.html" style="text-decoration:underline;color:#61399d;">Yahoo! Villkor för användning</a> | <a rel="nofollow" target="_blank" href="http://info.yahoo.com/legal/se/yahoo/mail/atos.html" style="text-decoration:underline;color:#61399d;">Yahoo! Mail –Villkor för användning</a> | <a rel="nofollow" target="_blank" href="http://info.yahoo.com/privacy/se/yahoo/details.html" style="text-decoration:underline;color:#61399d;">Yahoo! Sekretesspolicy</a>
</div>
</td>
</tr>
<tr>
<td align="left" valign="top">
<div style="font-family:Arial, Helvetica, sans-serif;font-size:11px;line-height:14px;color:#545454;margin-left:16px;margin-right:14px;">Var god svara inte på detta meddelande. Detta är ett servicemeddelande som rör din användning av Yahoo! Mail. Om du vill veta mer om Yahoo!s användning av personlig information, inklusive användning av webb-beacons i HTML-baserad e-post, kan du läsa vår Yahoo! Sekretesspolicy. Yahoo!s adress är 701 First Avenue, Sunnyvale, CA 94089, USA.<br /><br />RefID: lp-1037111</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<img width="1" height="1" src="http://pclick.internal.yahoo.com/p/s=2143684696">
</body>
</html>`
で、データを抽出しようとするpythonのコードは以下の通りです。
>>> import sqlite3
>>> conn = sqlite3.connect('C:/temp/Mobils/export/com.yahoo.mobile.client.android.mail/databases/mail.db')
>>> c = conn.cursor()
>>> conn.row_factory=sqlite3.Row
>>> c.execute('select body from messages_1 where _id=7')
<sqlite3.Cursor object at 0x0000000001FB78F0>
>>> r = c.fetchone()
>>> r.keys()
['body']
>>> print(r['body'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python32\lib\encodings\cp850.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 9629: character maps to <undefined>
>>>
どなたか、これをファイルにプリント/ライトする方法をご存知でしょうか。はい、私はこれが標準出力に印刷されることを知っているが、私はファイルに書き込もうとすると、同じUnicodeEncodeErrorが表示されます。私はファイルオブジェクトの書き込みメソッドと
print(r['body'], file=f)
.
どのように解決するのですか?
書き込みたいファイルを開くときに、すべての文字を扱える特定のエンコーディングで開いてください。
with open('filename', 'w', encoding='utf-8') as f:
print(r['body'], file=f)
関連
-
[解決済み】UnicodeEncodeError:'charmap'コーデックは、文字をエンコードできない
-
[解決済み] UnicodeDecodeError: 'charmap' コーデックは、位置YのバイトXをデコードできません:文字は<undefined>にマップされます。
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?
-
[解決済み] UnicodeEncodeError: 'latin-1' コーデックは文字をエンコードできない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonでstdoutをパイピングするときに正しいエンコードを設定する
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Python 言語を決定するには?
-
[解決済み] Django filter queryset __in for *every* item in list