2010-11-15 8 views
2

Comment convertir une valeur Unicode en chaîne équivalente? Par exemple, j'ai "రమెశ్", et j'ai besoin d'une fonction qui accepte cette valeur Unicode et renvoie une chaîne.Conversion d'unicode en chaîne en C#

Je regardais la fonction System.Text.Encoding.Convert(), mais cela ne prend pas de valeur Unicode; il faut deux encodages et un tableau d'octets. J'ai basiquement un tableau d'octets que j'ai besoin d'enregistrer dans un champ de chaîne, puis je reviens plus tard et je convertis la chaîne en premier en un tableau d'octets. Par conséquent, j'utilise ByteConverter.GetString (byteArray) pour enregistrer le tableau d'octets dans une chaîne, mais je ne peux pas le récupérer dans un tableau d'octets.

+0

Quel est le format que vous avez le "Unicode" dans? –

+0

Eh bien j'utilise les méthodes UnicodeEncoding.GetString (byteArray) qui retourne une chaîne d'un byteArray. Quand j'inspecte la ficelle, elle a une charge de sybols bizarres! – Bob

+0

"Unicode" n'est pas un encodage. Le 'UnicodeEncoding' dans .NET aurait dû s'appeler' UTF16Encoding' - honte à Microsoft. : P –

Répondre

5

les opérations suivantes:

byte[] bytes = ...; 

string convertedUtf8 = Encoding.UTF8.GetString(bytes); 
string convertedUtf16 = Encoding.Unicode.GetString(bytes); // For UTF-16 

L'inverse est utilise `GetBytes():

byte[] bytesUtf8 = Encoding.UTF8.GetBytes(convertedUtf8); 
byte[] bytesUtf16 = Encoding.Unicode.GetBytes(convertedUtf16); 

Dans la classe Encoding, il y a plus de variantes si vous en avez besoin.

1

UTF8Encoding Class

UTF8Encoding uni = new UTF8Encoding(); 
    Console.WriteLine(uni.GetString(new byte[] { 1, 2 })); 
0

Il existe différents types d'encodage. Vous pouvez essayer certains d'entre eux pour voir si votre bytestream se converti correctement:

System.Text.ASCIIEncoding encodingASCII = new System.Text.ASCIIEncoding(); 
System.Text.UTF8Encoding encodingUTF8 = new System.Text.UTF8Encoding(); 
System.Text.UnicodeEncoding encodingUNICODE = new System.Text.UnicodeEncoding(); 

var ascii = string.Format("{0}: {1}", encodingASCII.ToString(), encodingASCII.GetString(textBytesASCII)); 
var utf = string.Format("{0}: {1}", encodingUTF8.ToString(), encodingUTF8.GetString(textBytesUTF8)); 
var unicode = string.Format("{0}: {1}", encodingUNICODE.ToString(), encodingUNICODE.GetString(textBytesCyrillic)); 

Jetez un oeil ici aussi: http://george2giga.com/2010/10/08/c-text-encoding-and-transcoding/.

3

Pour convertir une chaîne en chaîne Unicode, faites comme ceci: très simple ... notez la fonction BytesToString qui évite d'utiliser tout élément de conversion intégré. Rapide aussi.

private string BytesToString(byte[] Bytes) 
{ 
    MemoryStream MS = new MemoryStream(Bytes); 
    StreamReader SR = new StreamReader(MS); 
    string S = SR.ReadToEnd(); 
    SR.Close(); 
    return S; 
} 

private string ToUnicode(string S) 
{ 
    return BytesToString(new UnicodeEncoding().GetBytes(S)); 
} 
4

Utiliser .ToString();

this.Text = ((char)0x00D7).ToString(); 
0
var ascii = $"{new ASCIIEncoding().ToString()}: {((ASCIIEncoding)new ASCIIEncoding()).GetString(textBytesASCII)}"; 
var utf = $"{new UTF8Encoding().ToString()}: {((UTF8Encoding)new UTF8Encoding()).GetString(textBytesUTF8)}"; 
var unicode = $"{new UnicodeEncoding().ToString()}: {((UnicodeEncoding)new UnicodeEncoding()).GetString(textBytesCyrillic)}";