2011-05-17 6 views
2

J'ai fait une classe pour coder une chaînevb.net - chaîne Encode UTF-8

Public Class UTF8 
    Public Shared Function encode(ByVal str As String) 
     Dim utf8Encoding As New System.Text.UTF8Encoding 
     Dim encodedString() As Byte 

     encodedString = utf8Encoding.GetBytes(str) 

     Return encodedString.ToString() 
    End Function 
End Class 

Retour encodedString.ToString() retourne toujours "System.Byte []". Comment pourrais-je obtenir la vraie chaîne UTF-8?

Répondre

4

Utilisez la méthode UTF8.GetString(Byte[]).

+1

Il est inutile de retourner la chaîne d'origine. Une chaîne encodée en utf8 doit rester dans un tableau d'octets. –

+0

Et comment puis-je vérifier si une chaîne est utf-8? Je vous remercie. – thom

+0

Vous avez manqué le point. Ce n'est pas possible, une chaîne est toujours encodée en utf16 dans .NET. Si vous pensez que vous avez une chaîne qui contient utf8 alors vous ne le faites sûrement pas, il est très probable que vous avez été mutilé dans le processus. –

2

Nous pouvons vérifier si une chaîne est UTF-8 en examinant la valeur de la nomenclature de la chaîne. Ceci est l'exemple de code correct:

Public Shared Function encode(ByVal str As String) As String 
    'supply True as the construction parameter to indicate 
    'that you wanted the class to emit BOM (Byte Order Mark) 
    'NOTE: this BOM value is the indicator of a UTF-8 string 
    Dim utf8Encoding As New System.Text.UTF8Encoding(True) 
    Dim encodedString() As Byte 

    encodedString = utf8Encoding.GetBytes(str) 

    Return utf8Encoding.GetString(encodedString) 
End Function