Как узнать, какую схему кодирования использовать при преобразовании строки в байтовый массив? - PullRequest
3 голосов
/ 16 января 2009

Из моей базы данных я получаю очень длинную строку, которая в основном xml. Мне нужно изменить его на байтовый массив.

Я не могу разобраться с потенциальными проблемами кодирования.

О чем мне нужно быть осторожным при выполнении этого преобразования?

 public static byte[] StringToByteArray1(string str)
    {
        return Encoding.ASCII.GetBytes(str);
    }

    public static byte[] StringToByteArray2(string str)
    {
        return Encoding.UTF8.GetBytes(str);
    }

Encoding.ASCII.GetBytes против Encoding.UTF8.GetBytes

Ответы [ 3 ]

2 голосов
/ 16 января 2009

Если вы имеете дело с символами ASCII, тогда результат идентичен.

С другой стороны, если в вашей строке есть не-ASCII-символы (например, π), то: в кодировке ASCII они будут заменены на «?».

в UTF8 они будут представлены символом (возможно, несколько байтов).

Вероятно, стоит указать, что внутренне .NET использует UTF16 для кодирования своих строк.

В целом, хотя вам, вероятно, лучше всего использовать UTF8, если у вас нет особых причин не делать этого.

1 голос
/ 16 января 2009

Какая кодировка используется при преобразовании строк в байты и экспорте их из вашего приложения, зависит на 100% от программы, которая будет считывать эти байты и интерпретировать их как строки.

Например, если вы пишете файл, который должен быть прочитан программой, для которой требуются файлы в кодировке ASCII, тогда вы должны использовать ASCII, если программе чтения требуется CodePage 850, тогда вам нужно использовать эту кодировку, и если она требует UTF-8, затем вы используете эту кодировку и т. Д.

Однако, если вы пишете в файл, который будет считываться вашей собственной программой, я бы предложил использовать UTF-8, потому что эта кодировка, похоже, становится де-факто кодировкой.

Наконец, вы должны знать, что такое кодировка и как ее использовать. Так что, если вы еще не читали его - вы должны прочитать статью Джоэла Спольскиса «Абсолютный минимум, который должен знать каждый разработчик программного обеспечения, абсолютно точно должен знать о Юникоде и наборах символов (никаких оправданий!)» . Это очень хорошая статья. Прочитайте это! Да, ты должен.

Надеюсь, это поможет!

0 голосов
/ 16 января 2009

Вы должны использовать ASCII только для совместимости с унаследованным кодом, где это действительно ASCII. Обратите внимание, что это 7 битов, и он не будет поддерживать расширенные символы.

UTF-8 обычно в порядке (другие могут не согласиться) и выдаст вам 8-битные значения. Использование Unicode (UTF-16) является предпочтительным.

То, что вы делаете с байтовым массивом, повлияет на то, хотите ли вы ASCII, UTF-8 или Unicode.

Вот хороший справочник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...