Domanda

Non sono del tutto pro con codifiche, ma ecco quello che penso di sapere (anche se può essere sbagliato):

  1. ASCII è un 7-bit, codifica a lunghezza fissa, con i personaggi che si possono trovare nei grafici ASCII.
  2. UTF8 è una codifica a 8 bit, a lunghezza variabile. Tutti i personaggi possono essere scritti in UTF8.
  3. UCS-2 LE / BE sono a lunghezza fissa, codifiche a 16 bit che supportano i caratteri più comuni.
  4. UTF-16 è una codifica a 16 bit, di lunghezza variabile. Tutti i personaggi possono essere scritti in UTF16.

Sono quelli sopra tutti corretti?

Ora, per le domande:

  1. le funzioni di Windows "A" (come SetWindowTextA) prendere in stringhe ASCII? O "stringhe multi-byte" (più domande su questo di seguito)?
  2. Fare la Windows "W" funzioni prendono in UTF-16 stringhe o UCS-2 stringhe? Ho pensato che prendono in UCS-2, ma i nomi che mi confondono.
  3. WideCharToMultiByte , Microsoft utilizza la parola "stringa di caratteri estesi" per indicare UTF-16. In questo contesto, allora quello che è considerato una "stringa multi-byte"? UTF-8?
  4. È LPWSTR una "stringa di caratteri estesi"? Io direi che è, ma poi, non volevano che significa che sia UTF-16? E non sarebbe che significa che potrebbe essere utilizzato per i caratteri del display, per esempio, a 4 byte? Se no, allora ... è la visualizzazione impossibile caratteri a 4 byte? (Windows non sembra avere API per quelli.)
  5. è la funzionalità di WideCharToMultiByte un superset di quello di wcstombs, e fanno entrambi lavorano sullo stesso tipo di corda? Oppure si fa a, per esempio, il lavoro su UTF-16, mentre le altre opere in UCS-2?
  6. Sono percorsi di file in UTF-16 o UCS-2? So di Windows considera come una "serie di caratteri opaca" dalla documentazione di Microsoft, ma per lo standard C per funzioni come fwprintf, c'è qualche codifica standardizzata?
  7. Qual è la codifica "ANSI"? È che anche un termine corretto? E come si relaziona in ASCII?
  8. (ho avuto più domande, ma questo è abbastanza ... Ho dimenticato alcuni di loro comunque ...)

Si tratta di un sacco di domande, in modo da alcun legame con le spiegazioni su come tutti questi connect (a parte leggere lo standard Unicode, che non sarà di aiuto con l'API di Windows in ogni caso) sarebbe anche molto apprezzato.

Grazie!

È stato utile?

Soluzione

Sono quelli sopra tutti corretti?

Sì, se non si assume l'esistenza di caratteri non codificati in Unicode (per la maggior parte delle applicazioni pratiche, questa ipotesi va bene).

Non le funzioni di Windows "A" (come SetWindowTextA) prendere in stringhe ASCII? O "stringhe multi-byte" (più domande su questo di seguito)?

Si fa stringhe di byte (cioè, stringhe cui un'unità di codice è un byte, che è sempre un ottetto in Windows) codificata nella corrente "ANSI" / MBCS / codifica legacy. "ANSI" sono i termini storici per queste codifiche, ma non è corretto. Per i sistemi occidentali di Windows, questa codifica è di solito di Windows-1252.

Do the Windows "W" funzioni prendono in UTF-16 stringhe o UCS-2 stringhe? Ho pensato che prendono in UCS-2, ma i nomi che mi confondono.

Dato che Windows 2000, la maggior parte di essi supporta UTF-16. Il nome "largo" e il resto della terminologia Microsoft (ad esempio, "Unicode" che significa "UTF-16" o "UCS") sono stati scelti prima della moderna standard Unicode unificato la terminologia.

In WideCharToMultiByte, Microsoft utilizza la parola "stringa di caratteri estesi" per indicare UTF-16. In questo contesto, allora quello che è considerato una "stringa multi-byte"? UTF-8?

Ogni altra codifica che supporti WideCharToMultiByte è una "codifica multi-byte" in questo contesto, tra cui Windows-1251 e UTF-8.

Is LPWSTR una "stringa di caratteri estesi"? Io direi che è, ma poi, non volevano che significa che sia UTF-16? E non sarebbe che significa che potrebbe essere utilizzato per i caratteri del display, per esempio, a 4 byte? Se no, allora ... è la visualizzazione impossibile caratteri a 4 byte? (Windows non sembra avere API per quelli.)

LPWSTR è un puntatore ad wchar_t che è sempre un numero intero senza segno a 16 bit su Windows. Quali caratteri possono essere visualizzati non è correlato alla codifica fintanto che la codifica in grado di codificare tutti i caratteri Unicode. Windows è generalmente in grado di visualizzare i caratteri non BMP, ma non ovunque (ad esempio, la console non può).

è la funzionalità di WideCharToMultiByte un superset di quello di wcstombs, e fanno entrambi lavorano sullo stesso tipo di corda? Oppure si fa a, per esempio, il lavoro su UTF-16, mentre le altre opere in UCS-2?

non so davvero, ma non credo che si differenziano troppo. Suppongo che appena tenta di convertire alcuni non-BMP caratteri UTF-8 e guardare se il risultato è corretto.

Sono percorsi di file in UTF-16 o UCS-2? So di Windows considera come una "serie di caratteri opaca" dalla documentazione di Microsoft, ma per lo standard C per funzioni come fwprintf, c'è qualche codifica standardizzata?

I percorsi dei file sono infatti le matrici opache di UTF-16 caratteri, il che significa che Windows non effettua alcun tipo di traduzione durante la memorizzazione o la lettura di nomi di file (come Linux e a differenza di Mac OS X). Ma Windows ha ancora il suo strano comportamento insensibile caso per lo più definito che causa molti problemi, perché i nomi di file che vengono trattati equivalenti non sono necessariamente uguali. Che rompe molti invarianti; per esempio, su Linux senza interferenze da altri thread, se si crea con successo due file A e a in una directory, ci si ritroverà con due file distinte, mentre su Windows si ottiene solo un file (e, in generale, un numero imprevedibile di file).

Qual è la codifica "ANSI"? È che anche un termine corretto? E come si relaziona in ASCII?

ANSI è l'organizzazione di standardizzazione americano. Utilizzando questa parola quando si parla di codifiche è un termine improprio, ma una frequente, così si dovrebbe essere a conoscenza di esso. Io preferisco il termine Codifica legacy a 8 bit , perché penso che è in sostanza quello che è: una codifica non Unicode che viene tenuto solo per la compatibilità con legacy (Windows 9x) applications. Sui sistemi occidentali, questo è di solito di Windows-1252, che è una vera e propria superset di ASCII.

Altri suggerimenti

  1. * funzioni l'usato ANSI tabella codici attiva.

  2. * uso funzione W UTF-16.

  3. Multi-byte si riferisce a tutto ciò che è passato nel parametro CodePage. E 'più comunemente sia la tabella codici ANSI attivo o UTF-8.

  4. LPWSTR è una stringa UTF-16 che possono o non possono essere terminazione Null (vedi MSDN )

  5. Io non so nulla di wcstombs, io uso sempre WideCharToMultiByte.

  6. I percorsi dei file sono in UTF-16. In realtà tutto il testo è UTF-16 internamente in Windows.

  7. Per ANSI codifica è necessario leggere su che in alcuni dettagli. Si potrebbe fare di peggio che iniziare con Wikipedia e seguire i link da lì.

Mi auguro che aiuta e che se ho qualcosa di sbagliato, chi ne sa di più si prega di fare modificare questo per correggere eventuali errori!

Ampi corde usato per essere UCS-2. Da Windows 2000, larghe stringhe sono UTF-16. Buono a sapere se è necessario mantenere qualche vecchio sistema legacy.

Prima di tutto troverete un sacco di informazioni nel questo argomento così .

ASCII è un set di caratteri, non codifica. Ora, c'è un certo numero di set di caratteri a 8 bit, uno dei quali è impostata come predefinita nel sistema (si può cambiare in Impostazioni internazionali). * Funzioni A accettano caratteri a 8 bit in quel charset. UTF-8 non è un set di caratteri, ma codifica di Unicode charset. * Funzioni W, come comprendo, uso UTF-16 invece che UCS-2.

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