[英]How to identify improperly encoded string python?
我有以下字符串
my_str = 'ґрµ р рѕр рґр сџ сѓрµр сњсѓрєрѕс рґрµсџс сњрѕрѕсѓс рїрѕ с рѕс рїсђрѕрёр сџ рјсѓс рґр сџ рер рµрѕрёсџ рєрѕсђрјрѕрі'
這個字符串的編碼不正確,這是顯而易見的。 但是有沒有辦法自動檢測到這一點?
這不是mojibake
。 我試過
from ftfy.badness import badness
badness(my_str)
返回 0,這意味着這不是 mojibake。 我也試過
ftfy.fix_text(my_str)
它返回原始字符串my_str
。
如果我嘗試對其進行編碼而不是編碼
my_str.encode('utf-8').decode('latin-1')
結果是:
Ò\x91Ñ\x80µ Ñ\x80 Ñ\x80Ñ\x95Ñ\x80 Ñ\x80Ò\x91Ñ\x80 Ñ\x81Ñ\x9f Ñ\x81Ñ\x93Ñ\x80µÑ\x80 Ñ\x81Ñ\x9aÑ\x81Ñ\x93Ñ\x80Ñ\x94Ñ\x80Ñ\x95Ñ\x81 Ñ\x80Ò\x91Ñ\x80µÑ\x81Ñ\x9fÑ\x81 Ñ\x81Ñ\x9aÑ\x80Ñ\x95Ñ\x80Ñ\x95Ñ\x81Ñ\x93Ñ\x81 Ñ\x80Ñ\x97Ñ\x80Ñ\x95 Ñ\x81 Ñ\x80Ñ\x95Ñ\x81 Ñ\x80Ñ\x97Ñ\x81Ñ\x92Ñ\x80Ñ\x95Ñ\x80Ñ\x91Ñ\x80 Ñ\x81Ñ\x9f Ñ\x80Ñ\x98Ñ\x81Ñ\x93Ñ\x81 Ñ\x80Ò\x91Ñ\x80 Ñ\x81Ñ\x9f Ñ\x80еÑ\x80 Ñ\x80µÑ\x80Ñ\x95Ñ\x80Ñ\x91Ñ\x81Ñ\x9f Ñ\x80Ñ\x94Ñ\x80Ñ\x95Ñ\x81Ñ\x92Ñ\x80Ñ\x98Ñ\x80Ñ\x95Ñ\x80Ñ\x96
或者
my_str.encode('utf-8').decode('latin-1')
返回
Ò\x91Ñ\x80µ Ñ\x80 Ñ\x80Ñ\x95Ñ\x80 Ñ\x80Ò\x91Ñ\x80 Ñ\x81Ñ\x9f Ñ\x81Ñ\x93Ñ\x80µÑ\x80 Ñ\x81Ñ\x9aÑ\x81Ñ\x93Ñ\x80Ñ\x94Ñ\x80Ñ\x95Ñ\x81 Ñ\x80Ò\x91Ñ\x80µÑ\x81Ñ\x9fÑ\x81 Ñ\x81Ñ\x9aÑ\x80Ñ\x95Ñ\x80Ñ\x95Ñ\x81Ñ\x93Ñ\x81 Ñ\x80Ñ\x97Ñ\x80Ñ\x95 Ñ\x81 Ñ\x80Ñ\x95Ñ\x81 Ñ\x80Ñ\x97Ñ\x81Ñ\x92Ñ\x80Ñ\x95Ñ\x80Ñ\x91Ñ\x80 Ñ\x81Ñ\x9f Ñ\x80Ñ\x98Ñ\x81Ñ\x93Ñ\x81 Ñ\x80Ò\x91Ñ\x80 Ñ\x81Ñ\x9f Ñ\x80еÑ\x80 Ñ\x80µÑ\x80Ñ\x95Ñ\x80Ñ\x91Ñ\x81Ñ\x9f Ñ\x80Ñ\x94Ñ\x80Ñ\x95Ñ\x81Ñ\x92Ñ\x80Ñ\x98Ñ\x80Ñ\x95Ñ\x80Ñ\x96
或者
my_str.encode('utf-8').decode('Windows-1254')
我有
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 25: character maps to <undefined>
我的問題是我不知道原始編碼,在這種情況下,這是一些俄語字符串,可能是已編碼為 UTF-8 的 Windows-1254。 我正在尋找類似的東西
def bad_encoding(str_) -> bool:
return True if string has been encoded bad else False
沒有正確的方法來識別字符串的確切編碼。 您可以檢查最常見的函數並使用 try/exception 構建布爾函數。
def bad_encoding(text):
try:
text = text.encode('cp1252').decode('utf-8')
return False
except (UnicodeEncodeError, UnicodeDecodeError):
try:
text = text.encode('cp1252').decode(
'latin-1').encode('utf-8').decode('utf-8')
return False
except UnicodeEncodeError:
return True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.