2009-10-19 1 views
4

Есть ли эквивалент C# utf8_decode?C# и utf8_decode

+1

В качестве примечания стороны .NET string/char уже имеют UTF-16. – Powerlord

+1

Но utf8_decode() _takes_ закодированная utf8 строка и возвращает строку iso-8859-1. – VolkerK

+1

@VolkerK: Вот почему это было примечание. Пользователь не указывает, откуда исходит текст для кодирования, поэтому я упомянул, какой формат строк .NET по умолчанию. – Powerlord

ответ

10

Используйте класс Encoding.

Например:

byte[] bytes = something; 
string str = Encoding.UTF8.GetString(bytes); 
+1

nitpicking: пример больше похож на utf8 _ ** en ** code(). – VolkerK

4

Да. Вы можете использовать класс System.Text.Encoding для преобразования кодировки.

string source = "Déjà vu"; 
Encoding unicode = Encoding.Unicode; 
// iso-8859-1 <- codepage 28591 
Encoding latin1 = Encoding.GetEncoding(28591); 
Byte[] result = Encoding.Convert(unicode, latin1, unicode.GetBytes(s)); 
// result contains the byte sequence for the latin1 encoded string 

редактировать: или просто

string source = "Déjà vu"; 
Byte[] latin1 = Encoding.GetEncoding(28591).GetBytes(source); 

строка (System.String) всегда Юникод, т.е. если преобразовать последовательность байт обратно в строку (Encoding.GetString()) Ваши данные снова будут сохранены в формате UTF -16 кодовых точек снова.

1

Если вход является строкой здесь является метод, который, вероятно, работать (предполагая, что ваш от Wester Европы :)

public string Utf8Decode(string inputDate) 
{ 
    return Encoding.GetEncoding("iso-8859-1").GetString(Encoding.UTF8.GetBytes(inputDate)); 
} 

Конечно, если текущей кодировки из inputData не является latin1, измените «iso-8859-1» на правильную кодировку.

+0

Это вернет System.String, как будто 'inputDate' был (ложно) utf8 закодирован, но на самом деле содержит последовательность байтов iso-8859-1. Например. inputDate = "Déjà vu". UTF8.GetBytes() возвращает последовательность {68, 195, 169, 106, 195, 160, 32, 118, 117}. («iso-8859-1»). GetString() будет интерпретировать каждый отдельный байт (поскольку он является однобайтовой кодировкой) в качестве символа. В результате строка 'Dà © jà vu' – VolkerK

+1

Здравствуйте, пользователь ссылался на функцию php. Возможно, это потому, что у него есть некорректно закодированная «строка», я имею в виду что-то вроде «Dà © jà vu» и хочу, чтобы это стало «Дежавю». Это происходит, когда вы общаетесь с сервером mysql с кодировкой utf8, и вы забываете указать кодировку utf8 в строке подключения. Но я согласен с тобой, utf8decode в .NET-строке не очень хорошо. –