Преобразование Юникода в С#

Я пытаюсь присвоить Unicode строке, но она возвращает строку «Привет» как «ÐŸÑ€Ð¸Ð²ÐµÑ‚». Но мне нужно «Привет», я конвертирую с помощью следующей функции.

public string Convert(string str)
{
    byte[] utf8Bytes = Encoding.UTF8.GetBytes(str);
    str = Encoding.UTF8.GetString(utf8Bytes);
    return str;
}

что я могу сделать, чтобы решить эту проблему, чтобы вернуть "Привет".


person manoj    schedule 28.01.2013    source источник
comment
См. раздел stackoverflow.com/questions/4184190/.   -  person Mihai8    schedule 28.01.2013
comment
Что вы делаете с результатом метода? Я совершенно уверен, что проблема там или во входе. Ваш код на самом деле возвращает именно то, что вы передаете в качестве ввода   -  person Steve B    schedule 28.01.2013
comment
Разве за Encoding.UTF8.GetBytes не следует GetString, по сути, noop?   -  person Rawling    schedule 28.01.2013
comment
UTF8 отличается от юникода? Ваша результирующая строка не будет юникодной, поскольку вы конвертируете в utf8. Какова ваша входная строка и ожидаемая выходная строка?   -  person Peter H    schedule 28.01.2013
comment
Этот код, кажется, работает для меня, как есть. Где вы читаете результирующее значение?   -  person Ravi Y    schedule 28.01.2013
comment
@PeterH: Да, результатом БУДЕТ юникод. Он конвертирует из UTF16 в UTF8 и обратно в UTF16. По сути, функция ничего не делает, кроме как возвращает str.   -  person Matthew Watson    schedule 28.01.2013


Ответы (2)


П — это символ Юникода 0x041F, а его кодировка UTF-8 — 0xD0 0x9F, что приводит к П.

Поскольку функция возвращает только входной параметр, как уже обсуждали комментаторы, я делаю вывод, что ваша исходная входная строка на самом деле находится в UTF-8, и вы хотите преобразовать ее в собственную строку .Net.

Откуда исходная строка?

Вместо чтения входных данных в C# string измените свой код на чтение byte[], а затем вызовите Encoding.UTF8.GetString(inputUtf8ByteArray).

person devio    schedule 28.01.2013

Я попробовал следующий код ниже, и это были мои результаты:

        string test="Привет";
        byte[] utf8Bytes = Encoding.UTF8.GetBytes(test);

        String str1 = Encoding.Unicode.GetString(utf8Bytes);
        String str2 = Encoding.UTF8.GetString(utf8Bytes);

Вывод str1=鿐胑룐닐뗐苑

Вывод str2=Привет

person Peter H    schedule 28.01.2013
comment
да работает. На самом деле, я нашел свою ошибку. На самом деле я читал строку из файла, поэтому изменил ее на File.ReadAllBytes(Filename), и это сработало!! - person manoj; 28.01.2013