1

Web ページから特定のアラビア文字列を取得して、これらの文字列を db に保存しようとしました。

最初の問題

.私ができる唯一の方法は、次のようにユニコードを使用して文字数を指定することです。

import urllib,re
content=urllib.urlopen("http://example.com/content.html").read()
content = unicode(content,"utf-8")
Strings = re.findall("<Strong>...........</strong>",content) # it will work fine and fetch it but only strings with 11 char or letter (11 place) 

第二の問題

テキストファイルに書き込もうとすると、次のように表示されます。

UnicodeEncodeError: 'ascii' コーデックは位置 0-3 の文字をエンコードできません: 序数が範囲外です (128)

そして、それをデータベースに保存しようとすると、次のように表示されます。

ProgrammingError: (1064、「SQL 構文にエラーがあります。'\xd8\xa7\xd9\x84\xd9\x82\xd8\xb5\ 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 xd9\x8a\xd8\xb1)' 行 1")

私が考えているのは、それをフェッチしてbase64にエンコードしてからdbに保存することですが、それでもエラーが発生します:

UnicodeEncodeError: 'ascii' コーデックは位置 0-3 の文字をエンコードできません: 序数が範囲外です (128)

4

1 に答える 1

1

私ができる唯一の方法は、 を使用して何文字かを指定することです。このようにユニコードを使用します

わかりました...それは問題ですか?正規表現を使用して HTML から文字列をハッキングする一般的な信頼性の低さ以外に、適切なパーサー (lxml.html など) の使用を検討してください。

テキストファイルに書き込もうとすると、次のように表示されます:UnicodeEncodeError

ファイルはバイトなので、テキスト ファイルに書き込むには、文字をエンコードしてバイトに戻す必要があります。例えば

with open('file.txt', 'w') as fp:
    fp.write(content.encode('utf-8'))

文字を直接書き込もうとすると、Python はエンコーディング (通常は ASCII) を推測しますが、アラビア語は ASCII で表現できないため、上記のように失敗します。

そして、それをデータベースに保存しようとすると、次のように表示されます: ProgrammingError: (1064, "SQL 構文にエラーがあります。'\xd8\ 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 xa7\xd9\x84\xd9\x82\xd8\xb5\xd9\x8a\xd8\xb1)'

郵便番号?これは Unicode の問題ではないと思います。そのコンテンツを引用符で囲むことなく、コンテンツを含むクエリを作成しているように見えます。そうしないでください - パラメータ化されたクエリを使用してください。

c.execute('INSERT INTO something VALUES ('+content+')')     # fails, and security horror
c.execute('INSERT INTO something VALUES (%s)', (content,))  # fine

私が考えているのは、それを取得してbase64にエンコードすることです

繰り返しますが、base64 は文字ではなくバイトで動作するため、最初にエンコードします。

content.encode('utf-8').encode('base64')

ただし、データベースに Unicode 文字を格納するために base64 にエンコードする必要はありません。UTF-8 照合でテーブル列を使用していることを確認し、接続文字セットとして UTF-8 を使用してください。追加の処理は必要ありません。

于 2012-11-02T14:52:07.350 に答える