2010-05-18 3 views

ответ

9

Первое, что нужно знать о том, что нет такого понятия, как «UTF-8 строку» в .NET. Все строки в .NET эффективно UTF-16. Тем не менее .NET предоставляет класс Encoding, который позволяет декодировать двоичные данные в строки и перекодировать его позже.

Encoding.Convert может преобразовывать массив байтов, представляющий текст, закодированный с одной кодировкой, в массив байтов с тем же текстом, кодированным с другим кодированием. Это то, что вы хотите?

С другой стороны, если у вас уже есть строка, вы можете использовать:

byte[] bytes = Encoding.GetEncoding("gb2312").GetBytes(text); 

Если вы можете предоставить дополнительную информацию, которая будет полезна.

+0

Есть также функция 'C' доступна? – godlyblade

+1

@godlyblade: Я понятия не имею, что вы имеете в виду, боюсь. Если вы запрашиваете поддержку кодировки Unicode на языке программирования C, это будет совершенно другой вопрос ... Я не сделал ничего подобного в C. –

0

Попробуйте это;

public string GB2312ToUtf8(string gb2312String) 
{ 
    Encoding fromEncoding = Encoding.GetEncoding("gb2312"); 
    Encoding toEncoding = Encoding.UTF8; 
    return EncodingConvert(gb2312String, fromEncoding, toEncoding); 
} 

public string Utf8ToGB2312(string utf8String) 
{ 
    Encoding fromEncoding = Encoding.UTF8; 
    Encoding toEncoding = Encoding.GetEncoding("gb2312"); 
    return EncodingConvert(utf8String, fromEncoding, toEncoding); 
} 

public string EncodingConvert(string fromString, Encoding fromEncoding, Encoding toEncoding) 
{    
    byte[] fromBytes = fromEncoding.GetBytes(fromString); 
    byte[] toBytes = Encoding.Convert(fromEncoding, toEncoding, fromBytes); 

    string toString = toEncoding.GetString(toBytes); 
    return toString; 
} 

source here

Смежные вопросы