sql >> Database teknologi >  >> RDS >> PostgreSQL

Python + PostgreSQL + mærkelig ascii =UTF8-kodningsfejl

Spørgsmålet starter med en falsk præmis:

ASCII-tegn er i intervallet "\x00" til og med "\x7F".

Det tidligere accepterede nu slettede svar opererede under to grove misforståelser (1) at locale ==kodning (2) at latin1-kodningen tilknytter "\x80" til et Euro-tegn.

Faktisk knytter alle ISO-8859-x-kodningerne "\x80" til U+0080, som er et af C1-kontroltegnene, ikke et Euro-tegn. Kun 3 af disse kodninger (x i (7, 15, 16)) giver Euro-tegnet som "\xA4". Se denne Wikipedia-artikel .

Du skal vide hvilken kodning er dine data i. Hvilken maskine blev de oprettet på? Hvordan? Lokaliteten, den blev oprettet i (ikke nødvendigvis din) kan give dig et fingerpeg.

Bemærk, at "Mine data er kodet på latin1" står deroppe med "Checken er med posten" og "Selvfølgelig vil jeg elske dig i morgen". Dine data er sandsynligvis kodet i en af ​​de cp125x-kodninger, der findes på Windows-platforme. Bemærk, at alle undtagen cp1251 (Windows kyrillisk) knytter "\x80" til euro-tegnet:

>>> ['\x80'.decode('cp125' + str(x), 'replace') for x in range(9)]
[u'\u20ac', u'\u0402', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac', u'\u20ac']

Opdater som svar på OP's kommentar

Det er lidt forvirrende:Først siger du

Men senere siger du

Forklar venligst.

Valg af en passende cp125x-kodning:Hvor (geografisk placering) blev filen oprettet? På hvilket eller hvilke sprog er teksten skrevet? Andre tegn end den formodede euro med værdier> "\x7f"? Hvis ja, hvilke og hvilken sammenhæng bruges de i?

Opdatering 2 Hvis du ikke "ved hvordan programmet er skrevet", kan hverken du eller vi danne dig en mening om, hvorvidt det altid bruger "\x80" til euro-tegnet. Selvom det ville være monumental dumhed at gøre noget andet, kan det ikke udelukkes.

Hvis teksten er skrevet på engelsk og/eller den er skrevet i USA, og/eller den er skrevet på en Windows-platform, så er det rimeligt sikkert, at cp1252 er vejen at gå ... indtil du får bevis for det modsatte, i hvilket tilfælde du selv skal gætte en kodning eller besvare spørgsmålene (hvilket sprog, hvilken lokalitet).




  1. F# fejl 'fejl FS0039:Navnerummet eller modulet 'MySql' er ikke defineret'?

  2. Tom side på Opencart Admin Side

  3. Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:Ja) efter nulstilling af adgangskode LINUX

  4. Laravel:SQLSTATE[HY000] [2054] Serveren anmodede om godkendelsesmetode ukendt for klienten