Due codifiche utilizzate nella stringa RTF non verranno visualizzate correttamente in RichTextBox?

StackOverflow https://stackoverflow.com/questions/494470

Domanda

Sto cercando di analizzare alcuni RTF, che torno dal server. Per la maggior parte del testo torno indietro, questo funziona benissimo (e l'uso di un controllo RichTextBox farà il lavoro), tuttavia parte dell'RTF sembra contenere un'ulteriore & Quot; codifica & Quot; e alcuni personaggi si corrompono.

La stringa originale è la seguente (e contiene alcuni dei caratteri usati in polacco):

ąćęłńóśźż

La stringa RTF con caratteri codificati esadecimali che viene restituita è simile a questa

{\lang1045\langfe1045\f16383 {\'b9\'e6\'ea\'b3{\f7 \'a8\'bd\'a8\'ae}\'9c\'9f\'bf}}

Ho problemi a decodificare i caratteri & # 324; & # 243; nella stringa restituita, sembrano essere rappresentati da due valori esadecimali ciascuno, mentre il resto del stringa è rappresentata (come previsto) da singoli valori esadecimali.

Utilizzo di un controllo RichTextBox su " parse " l'RTF genera un testo corruttore (i due caratteri in questione vengono visualizzati come quattro diversi caratteri indesiderati).

Se codificassi io stesso la stringa semplice in esadecimale usando la tabella codici prevista (1250, Latin 2, la tabella codici ANSI per lcid 1045) otterrei il seguente:

\'B9\'E6\'EA\'B3\'F1\'F3\'9C\'9F\'BF

Mi sono perso su come posso decodificare correttamente la parte {\ f7 \ 'a8 \' bd \ 'a8 \' ae} della stringa restituita che dovrebbe corrispondere a < !> # 324; <> # 243;!.

Si noti che non esiste una definizione del carattere per \ f7 nell'intestazione RTF e la stringa sembra corretta quando visualizzata direttamente sul server, il che significa che i caratteri (se sono danneggiati) sono danneggiati da qualche parte nel conversione prima dell'invio.

Non sono sicuro che il problema si trovi sul lato server (poiché non ho alcun controllo su questo), ma poiché il server viene utilizzato per molti lavori di traduzione, suppongo che la stringa restituita sia ok.

Ho esaminato le specifiche RTF ma non riesco a trovare alcun suggerimento su questo tipo di combinazione di codifiche.

È stato utile?

Soluzione

Non so perché stia accadendo, ma la codifica sembra essere GBK ( o qualcosa di sufficientemente simile).

Forse il server prova a fare alcune " clever " la corrispondenza per trovare i caratteri o la codifica dei caratteri predefinita del server è GBK o giù di lì, e quei caratteri (e solo quelli) compaiono anche in GBK, quindi preferisce quello.

L'ho scoperto aggiungendo i codici esadecimali offensivi (A8 BD A8 AE) come byte in un semplice file HTML, in modo da poter passare attraverso le codifiche del mio browser e vedere se qualcosa corrispondeva:

<html><body>¨½¨®</body></html>

Con mia sorpresa, il mio browser ha trovato " & # 324; & # 243; " subito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top