У меня есть строка, которую я получаю из стороннего приложения, и я хотел бы правильно отобразить ее на любом языке, используя C #, на моей Windows Surface.
Из-за неправильной кодировки часть моей строки на испанском выглядит так:
Acción
тогда как это должно выглядеть так:
Acción
Согласно ответу на этот вопрос: Как узнать кодировку строк в C # , кодировка, которую я получаю, должна уже поступать в UTF-8, но она читается в Encoding.Default (возможно, ANSI?).
Я пытаюсь преобразовать эту строку в настоящий UTF-8, но одна из проблем заключается в том, что я могу видеть только подмножество класса Encoding (только свойства UTF8 и Unicode), вероятно, потому, что я ограничен интерфейсом Windows Surface.
Я попробовал некоторые фрагменты, которые я нашел в Интернете, но ни один из них не оказался успешным для восточных языков (например, корейский). Один пример выглядит следующим образом:
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);
Я также попытался извлечь строку в байтовый массив и затем использовать UTF8.GetString:
byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
char ch = myString[ix];
myByteArray[ix] = (byte) ch;
}
myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);
Ребята, у вас есть другие идеи, которые я мог бы попробовать?
Encoding.Default
возвращает системную кодовую страницу ANSI.Ответы:
Как вы знаете, строка поступает так, как
Encoding.Default
вы могли бы просто использовать:Еще одна вещь, которую вы, возможно, должны помнить: если вы используете Console.WriteLine для вывода некоторых строк, то вы также должны написать
Console.OutputEncoding = System.Text.Encoding.UTF8;
!!! Или все строки utf8 будут представлены как gbk ...источник
Encoding.GetEncoding(...)
; вам нужно будет найти имя фактической кодировки, которая была неправильно использована на другом конце.myString
это моджибаке. Код сначала отменяет неправильное декодирование, затем выполняет правильное декодирование. Это работает, пока неправильное декодирование не потеряло данные. Но, как указал @SLaks, было бы лучше использовать точную кодировку, которая была неправильной. (Более точные имена и комментарии в коде помогут понять, насколько неправильно выглядящий код на самом деле является попыткой сделать правильно.)Вывод должен выглядеть так
вызвать DecodeFromUtf8 ();
источник
Ваш код читает последовательность байтов в кодировке UTF8 и декодирует их с использованием 8-битной кодировки.
Вам нужно исправить этот код, чтобы декодировать байты как UTF8.
В качестве альтернативы ( не идеально ), вы можете преобразовать неверную строку обратно в исходный байтовый массив - кодируя его с использованием неправильной кодировки - затем повторно декодировать байты как UTF8.
источник
источник
Если вы хотите сохранить любую строку в базе данных MySQL, сделайте это: ->
Структура поля вашей базы данных в phpmyadmin [или любой другой панели управления] должна быть установлена в utf8-gerneral-ci
2) вы должны изменить свою строку [Пример. textbox1.text] для байта, поэтому
2-1) определить byte [] st2;
2-2) преобразовать вашу строку [textbox1.text] в Unicode [mmultibyte string]:
3) выполнить эту команду sql перед любым запросом:
3-2) теперь вы должны вставить это значение в поле имени, например:
4) основная работа, на которую многие решения не обращали внимания, это строка ниже: вы должны использовать addwithvalue вместо add в параметре команды, как показано ниже:
++++++++++++++++++++++++++++++++++ наслаждайтесь реальными данными на вашем сервере базы данных вместо ????
источник
Используйте приведенный ниже фрагмент кода, чтобы получить байты из CSV-файла
Позвоните ниже и сохраните его как приложение
источник