Domanda

Sì, stiamo parlando di codici ASCII. Le mie scuse non sono lo sviluppatore di Delphi qui.

È stato utile?

Soluzione

Per Delphi 7, otterrei la libreria Unicode gratuita di Mike Lischke che è l'autore di Virtual Treeview.

La libreria include molte funzioni di conversione per andare da e verso Unicode, quindi puoi usare quelle che hanno più senso nella tua applicazione.

Oppure puoi eseguire l'aggiornamento a Delphi 2009 che ha routine di codifica integrate e una propria libreria di funzioni di conversione.

Altri suggerimenti

Vediamo subito alcune cose. Il set di caratteri (set di caratteri) e le codifiche dei caratteri sono due concetti correlati ma diversi. Un set di caratteri è un elenco astratto di caratteri con una sorta di codice di carattere intero associato. Quindi ci sono codifiche dei caratteri, che è fondamentalmente un algoritmo che descrive come i caratteri sono rappresentati in byte.

ASCII agisce sia come set di caratteri che come codifica. Usa 7 bit per esprimere 128 caratteri (94 stampabili). Unicode è invece un set di caratteri che esprime 1.114.112 punti codice. Esistono diverse codifiche per rappresentare le stringhe Unicode, ma le più importanti sono UTF-8, UTF-16, UTF-16LE e UTF-32. In altre parole, un singolo carattere Unicode può essere rappresentato in diversi modi a seconda delle codifiche.

  

Come posso convertire i caratteri Unicode in codici ASCII in Delphi 7?

Penso che la domanda possa essere interpretata in due modi.

  1. Ho una stringa Unicode in alcune codifiche che include solo caratteri stampabili ASCII. Come posso convertire la stringa in un array di byte di codifica ASCII?

  2. Ho una stringa Unicode in alcune codifiche che include anche caratteri stampabili non ASCII come i caratteri cinesi. Come posso codificare la stringa in una codifica ASCII senza perdere informazioni e successivamente decodificarla sulla stringa Unicode originale?

Se intendi il primo, puoi caricare la stringa Unicode in WideString come Osman dice e fa

var
  original: WideString;
  s: AnsiString;
begin
  s := AnsiString(original);

Se intendi il secondo, avresti bisogno di un algoritmo di codifica generico come Base64 . Puoi utilizzare DCPBase64.pas incluso in DCPcrypt v2 Beta 3 .

Dipende dalla tua definizione di conversione. Se vuoi mappare i 127 caratteri più bassi all'equivalente Unicode, puoi usare un cast esplicito. Ma questo crea immondizia se la stringa contiene caratteri più alti.

Se vuoi mappature come ë - > e e û - > puoi scrivere il tuo codice. Ma tieni presente che ci sono sempre caratteri che non possono essere convertiti.

" ASCII " è il nome di una mappatura specifica di caratteri in numeri, ma alcune persone dicono "codice ASCII" quando in realtà non significano affatto ASCII; vogliono solo il valore numerico di un personaggio, qualunque sia la mappatura in vigore al momento. Questa descrizione si applica a te?

In tal caso, puoi utilizzare la funzione standard Ord per ottenere il valore del punto di codice Unicode di qualsiasi carattere Unicode che hai.

var
  wc: WideChar;
  ws: WideString;
  x: Word;

x := Ord(wc);
x := Ord(ws[1]);

Se intendevi davvero ASCII, però, dovrai essere più specifico su quale tipo di conversione hai in mente.

Ad esempio, la lettera A è rappresentata in unicode come U + 0041 e in ansi come solo 41. Quindi la conversione sarebbe piuttosto semplice, ma è necessario scoprire come viene codificato il carattere unicode. I più comuni sono UTF-16 e UTF-8. UTF 16 è sostanzialmente due byte per carattere, ma anche questa è una semplificazione eccessiva, poiché un personaggio può avere più byte. UTF-8 suona come se significasse 1 byte per carattere ma può essere 2 o 3. Per complicare ulteriormente le cose, UTF-16 può essere little endian o big endian. (U + 0041 o U + 4100).

Dove la tua domanda non ha senso è se, ad esempio, volessi convertire la lettera araba ain U + 0639 in ansi in una lingua inglese. Non puoi.

Consulta le domande correlate sulla conversione da Unicode in ASCII:

In generale, un set di caratteri di centinaia di migliaia di voci non può essere convertito in un set di caratteri di 127 voci senza perdita di informazioni o schema di codifica.

Puoi utilizzare la funzione in http://swissdelphicenter.ch/en/showcode .php? id = 1692
Converte la stringa Unicode in stringa Ansi utilizzando la tabella codici specificata.
Se vuoi convertire usando la codepage di sistema predefinita (definita nelle opzioni regionali come codepage non unicode) puoi farlo semplicemente come segue:

var
  ws: widestring;
  s: string;
begin
  s:=string(ws)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top