Проблема кодирования текста в C# - encoding.getchars() дает странные результаты
Я работаю над проектом, который включает японский текст, закодированный в Shift-JIS. Я пытаюсь декодировать полезные символы из массивов байтов вот так:
Encoding encoding = Encoding.GetEncoding(932); string test = new string(encoding.GetChars(byteArray));
Это работает для 99% данных, но я получаю странные результаты только для нескольких символов. Характер ", например. Если я получу байты, соответствующие этому символу, например:
byte[] getBytesTest = encoding.GetBytes("¨");
Результаты именно такие, каких я и ожидал. Два байта, 0x81 и 0x4E, то есть то, что этот символ должен быть в Shift-JIS.
Однако если я попытаюсь преобразовать его обратно в строку:
string getCharsTest = new string(encoding.GetChars(getBytesTest));
...Я получаю вывод ошибки по умолчанию "?".
Так что tl;dr, я пытаюсь понять, почему это так:
byte[] getBytesTest = encoding.GetBytes("¨"); string getCharsTest = new string(encoding.GetChars(getBytesTest));
в результате получается "?" вместо"".
Что я уже пробовал:
Передача результатов GetBytes() в GetChars() и ручная передача байтов следующим образом:
encoding.GetChars(new byte[] {0x81, 0x4E})
и то, и другое не дает ожидаемого результата.
Не знаю, куда с этим идти.