2015-11-27 2 views
0

Я, к примеру, этот турецкий персонаж в моей Flex (как в «Adobe Flash») приложение: ˙GNewtonsoft Json.NET библиотеки неэкранированных строки неправильно для моих требований

Когда приложение сохраняет свое состояние база данных использует представление JSON, и этот персонаж становится убежал в: \ u00c4 \ u009f

Это вызывает у меня некоторые неудобства, потому что, когда неэкранированные с использованием методы Json.NET JsonConvert.DeserializeObject\ u00c4 \ u009f будет Ä (umlauted А, сопровождаемый невидимый характер

Я думаю, что я таким образом, столкнулись с ситуацией, когда строка была UTF8 на пути в (до побега), но все, что вещь внутри приложения Flex закодированы его JSON, возможно, не осознал этого и, таким образом, избежал его до двух литералов, которые он видел. Или закодированный формат верен, это действительно так, как строка UTF8 с турецким языком будет после esacping, и это библиотека Newtonsoft, которая не конвертируя его с использованием кодировки UTF8 при вытаскивании

Какой бы инструмент ни запутался, я как-то застрял в данных, представленных в настоящее время - вот как это делается в базе данных

Что я могу сделать с этим, чтобы Newtonsoft JSON.NET вернул мне «, а не Ä []?

+0

похоже, что Flex делает это неправильно. Прежде всего, он сохраняет один символ как два. И никто из них не является. Возможно, он не использует Unicode, а другой кодирует. Турецкий "- 0x11f. Ä действительно 0xC4, а 9F действительно невидимо. –

ответ

1

Я считаю, что комментарий yu_sha был прав; данные были неправильно сохранены. Я не думаю, что есть что-то, что можно сделать, чтобы заставить JSON.NET вернуть правильные данные (это не делает ничего плохого, и оно не спроектировано/не должно отвечать за исправление ошибок, сделанных в другом месте)

I был, однако, в состоянии спасти текст Я хотел со следующей строкой C# после JSON.NET была десериализацией его:

Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(THE_TEXT)); 

причины в том, Flex, кажется, хранить его, как сбежавший Latin-1. Вытащив необработанные байты с использованием кодировки iso-8859-1, а затем повторно интерпретировав их, как UTF8, они исправили их, хотя я не сомневаюсь, что могут быть ситуации, когда этот хак не работает.

Смежные вопросы