У меня общая путаница с кодировкой небольшого инструмента, который я пишу.
Прежде всего, я прошу прощения за то, что следующий код немного забит, но из кода, который я написал до сих пор, он наиболее близок к реальной работе.
Если я использую следующий код:
/*create file*/
FileStream fileS = new FileStream(filename + ".ppm", FileMode.Create, FileAccess.ReadWrite, FileShare.None, 8, FileOptions.None);
/*create a binary writer*/
BinaryWriter bWriter = new BinaryWriter(fileS, Encoding.ASCII);
/*write ppm header*/
string buffer = "P6 ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
buffer = width.ToString() + " ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
buffer = height.ToString() + " ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
buffer = "255 ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
/*write data out*/
byte[] messageByte = Encoding.UTF8.GetBytes(ppmDataBox.Text);
bWriter.Write(messageByte, 0, messageByte.Length);
/*close writer and bWriter*/
bWriter.Close();
fileS.Close();
Тогда я получаю файл, сохраненный в формате UTF-8, если я открою этот файл и сохраню его как ASCII, я получу ожидаемый PPM.
Однако, если я изменю строку:
byte[] messageByte = Encoding.UTF8.GetBytes(ppmDataBox.Text);
до
byte[] messageByte = Encoding.ASCII.GetBytes(ppmDataBox.Text);
Затем я получаю файл, сохраненный в формате ASCII, но файл неправильный, цвета неправильные, и в основном данные в файле не совпадают с данными в текстовом поле.
Я предполагаю, что текстовое поле находится в формате UTF-8, и данные, которые я вставляю в него, фактически являются форматом / символами ASCII, и мне сначала нужно преобразовать этот ASCII в соответствующий ему UTF-8 ... -8 версия этих персонажей). Однако, если я полностью честен, это мое первое путешествие в мир кодирования, и я совершенно не понимаю. Поэтому, пожалуйста, дайте мне знать, если я говорю мусор.
Вот пример данных, которые я вставляю в текстовое поле:
ÿÿ ÿÿ ÿÿ ÿÿ aa aa aa ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿ
он должен быть желтым с небольшими черными квадратами везде, но он становится зеленым, и когда файл создается в формате ASCII, данные в конечном итоге выглядят так:
?? ?? ?? ?? aa aa aa ?? ?? ?? ??