![]() |
Hej,
Sitter och klurar med att konvertera strängar från olika teckenkodningar till en och samma. Har strängar som är kodade i UTF-8, ISO-8859-1 samt MacRoman. Dessa ska konverteras till en och samma kodning, lämpligen UTF-8. Problemet är att jag inte vet - och inte kan veta - på förhand vilken kodning strängen har. Det är alltså inte fråga om POST-data. Miljön är php. mb_string-funktionerna stöder inte MacRoman, och iconv saknar möjlighet att avgöra vilken kodning som jag har för handen. Så problemet kan smalnas av till att utreda exakt vilken kodning som jag har i teckensträngen. Alternativt kan man tänka sig en bred översättningstabell som fixar alla kodningarna på en och samma gång. |
utf8_encode() kan du ju köra på ISO-8859-1 men det vet du väl förmodligen redan... Misstänker att du får göra egna funktioner för de andra två och sedan köra strängen genom alla tre funktionerna....
|
Egentligen är det en omöjlig uppgift eftersom i sig inte finns något som avslöjar teckenkodningen. I korta strängar finns det ju eventuellt ingenting alls som skiljer. Vad det gäller uft så kan man ofta lätt se det genom att man får samlingar av två-tre skräptecken när man ser det som iso. För att skilja mellan macroman och iso måste texten på något sätt vara kontextbaserad - handlar det om längre texter på svenska kan du ju leta efter förekomsten av ordet "är" exempelvis, 0x8A i macroman och 0xE4 i iso-8859-1. Du kan ju också försöka mappa så att inga stora bokstäver förekommer inuti ord.
|
Tack för svar. Det är korta strängar - EXIF och ITPC-data från bilder. Kan man testa förekomst av åäöÅÄÖéÈÜÜôÔ i respektive kodning och få ett entydigt svar på vilken kodning det handlar om?
UTF-8 kan jag skilja ut via mb_detect_charset men att skilja på iso-8859-1 och macroman är värre. Kör jag iconv från ISO till UTF på en macroman-sträng och vice versa blir resultatet inte bra. |
Optimalt är förstås om du hittar ett tecken som alltid är med i EXIF-filen men har ett annat nummer i MacRoman och ISO. Annars är det väl värt att leta efter förekomsten av 0xe4, 0xe5 och 0xf6 (iso) eller 0x8a, 0x8c och 0x9a (macroman) i strängarna (koderna för åäö)
/[a-z]+[\xe4\xe5\xf6][a-z]+/ för iso /[a-z]+[\x8a\x8c\x9a][a-z]+/ för macroman med preg_match exempelvis Accenttecknen ligger tydligen generellt högre (i bit-ordning) i iso än i macroman - även av detta skulle man kunna göra något. Edit: entydigt kan du aldrig veta eftersom du aldrig kan veta om man inte kan veta om någon menat att skriva "f^r" eller "för" - bitarna är exakt desamma - man får gå på sannolikhet. |
Tack igen!
Gjorde så här: Citat:
|
Alla tider är GMT +2. Klockan är nu 15:45. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson