オンライン注文の仕事で、いくつかの注文で極端な異常に気づき始めました。制限されていなかった1つのフィールドには、300万文字を超える文字列が出現しました。 Pythonを使用して詳細に調べたところ、実際には、そのような意味不明な文字列の1000以上のリストであることがわかりました。私はさらに掘り下げて、そのインスタンスをさらに見つけました。18000を超えるリスト要素で構成される5800万文字を超える文字列で最悪です。
したがって、文字列のいくつかのリストで構成される文字列があり、これらの文字列も改行しないスペースで区切られた意味不明な単語で構成されています。
例(読みやすくするために改行を追加しました):
'Р В Р’ВР
’ Р В РІР‚в„ўР вР
‚™Р’В Р В Р’В Р Р
 вЂ Р В РІР‚љРІвЂћСћР Р
’ РІР‚™Р’ВР
’ Р В Р’ Р’РВ
’ Р Р†Р РР
†Р вЂљРЎв„ўР В Р вЂ Р Р†Р вЂљРЎвЂєР Р
ЋРЎвЂєР В Р’ Р’ РІРР
ІР‚љРІвЂћСћР В РІРВ
‚™Р’В РРвЂ
以下は、5,800万の文字列で最も一般的な10の単語の数です。
Р 2453256
В 1926812
Р’В 895699
’В 822674
ІР399677
РІР‚в„ўР 382349
†235180
‚Р185503
‚в„ўР177792
†109266
ІвЂћСћР101490
今、例えば文字列「РІР‚в„ўР」をGoogleに挿入します。これらの文字列がサイトのソースコードに挿入されている、一見ランダムに見える100万を超えるサイトを取得しています。
私はこれをどうすればいいのか全くわかりませんが、誰かこれが何であるか知っていますか?
@Deunisの助けを借りて、私はここで何が起こっているのかを見つけました。
Utf8で少なくとも2バイトで表される特殊文字を取得すると、それをutf8としてデコードし、cp1251(キリル文字)としてエンコードすると、吹き飛ばされます。それを繰り返し行うと、文字列は長くなり、それらのWebサイトで観察された正確なパターンを示します。以下は、これらのパターンを再現するコードの例ですPythonコード:
def encode_decode(s,e1,e2):
t = s.encode(e1)
o = t.decode(e2)
return o
e1 = "cp1251"
e2 = "utf_8"
char = 'ä'
iterations = 6
print(char)
print(40*'-')
for _ in range(iterations):
char = encode_decode(char,e2,e1)
print(char)
print(40*'-')
for _ in range(iterations):
char = encode_decode(char,e1,e2)
print(char)
print(40*'-')
これは出力を生成します:
ä
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
Г¤
----------------------------------------
ä
----------------------------------------
あなたと同じ問題のあるウェブサイトを探していました。
それらの1つはフランスのウェブサイトであり、ここにその中のテキストがあります。
Mon banquier nemРВВЂЂССљв„ў appelle plus pour mondРвГВР'В©couvert、nousР“ВР'В ©changeonsdorР“ВР'В©navant sur mes nouveaux projets
英数字以外の文字(a-z/A-Z以外)は「キリル文字」に置き換えられます。このテキストには '、é...
この場合、マルチバイト文字が複数のユニバイト文字と見なされるASCIIエンコードの問題のように見えます。したがって、2バイト文字は2つの1バイト文字になります。
私はあちこち歩き回って、それがデータベースエンコーディングデータベース形式にリンクできることを発見しました。しかし、私はデータベースの専門家ではないので、より詳しい知識を持った人が説明を完了することができます。
したがって、@ james-k-polkが言ったように、表示されている文字は文字として表示されるべきではないか、私の意見ではzはある形式から別の形式に変換されているだけです。