- Remove From My Forums
-
Вопрос
-
При заполнении данных русскими ФИО в SimpleData.json
{ "UniqueId": "Group-1-Item-1", "Title": "Иванов", "Subtitle": "Item Subtitle: 1", "ImagePath": "Assets/Иванов.jpg", diam cubilia aptent vestibulum auctor eget dapibus pellentesque inceptos leo egestas interdum nulla consectetuer suspendisse adipiscing pellentesque proin lobortis sollicitudin augue elit mus congue fermentum parturient fringilla euismod feugiat" },при компиляции VS ругается
Исключение типа «System.ArgumentOutOfRangeException» возникло в mscorlib.dll, но не было обработано в коде пользователя
Сведения WinRT: Символ Юникода не имеет сопоставления в конечной многобайтовой кодовой странице.
Дополнительные сведения: Символ Юникода не имеет сопоставления в конечной многобайтовой кодовой странице.
Как настроить приложение чтобы оно понимало русские данные?
Ответы
-
Как всегда отвечаю сам себе
Оказалось проблема в кодировке файла .json, т.к. студия сохраняет его по умолчанию не в Юникод, а, кто бы мог подумать — в Win1251 !
Нужно открыть файл json, зайти в меню ФАЙЛ — Дополнительные параметры сохранения и выбрать там кодировку: Юникод (UTF-8, с сигнатурой), котд. стр. 65001.
-
Предложено в качестве ответа
24 января 2014 г. 10:48
-
Помечено в качестве ответа
Dmitriy Konyuhov
24 января 2014 г. 11:16
-
Предложено в качестве ответа
-
дело в кириллице. используйте латинские буквы(помоему json работает только с UTF-8, если самому не придумать скрипт перекодировки) или формат xml
в том приложении как раз изменение русских предложении на английские не выдает ошибку
Спасибо, проверю
-
Помечено в качестве ответа
Dmitriy Konyuhov
29 декабря 2013 г. 14:29
-
Помечено в качестве ответа
|
edward_jonson 163 / 163 / 68 Регистрация: 23.02.2011 Сообщений: 392 |
||||
|
1 |
||||
|
06.03.2017, 23:00. Показов 22392. Ответов 3 Метки нет (Все метки)
Здравствуйте. Понадобилось написать скриптик, и решил в целях ознакомления с python написать его как раз на нём.
0 |
|
Garry Galler 5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
||||
|
07.03.2017, 00:32 |
2 |
|||
|
Решение А вы файл почему в utf-8 не открываете?
Проблем записи любых не asccii символов не было.
1 |
|
4606 / 2027 / 359 Регистрация: 17.03.2012 Сообщений: 10,081 Записей в блоге: 6 |
|
|
07.03.2017, 10:37 |
3 |
|
В итоге все русские символы записываются как u0442 Куда записываются, в память или файл?
0 |
|
163 / 163 / 68 Регистрация: 23.02.2011 Сообщений: 392 |
|
|
07.03.2017, 12:09 [ТС] |
4 |
|
dondublon, в файл Garry Galler, спасибо большое, encoding=»utf-8″ решил проблему. Интуитивно казалось, что #coding=utf-8 так делает по умолчанию.
0 |
Веб-разработчик клиента пожаловался, что json-файл, который я передаю ему на FTP Bitrix-сайта, приходит в кодировке UTF с BOM.
Я проверил, действительно Notepad++ определяет его в такой кодировке:
Это легко проверить если открыть файл в двоичном виде (в Total Commander):
Как видно, в начале файла содержится 3 байта EF BB BF. Это и есть BOM-кодировка.
Нашел решение на инфостарте поиском.
В решении используется функция ЗаписьТекста:
Заменил ТекстовыйДокумент на ЗаписьТекста:
Лок_ИмяФайла = КаталогВременныхФайлов() + Строка(Новый УникальныйИдентификатор);ТекстСопутствующих = Обработки.дор_РассчетСопутствующихДляСайта.РассчитатьВФайл();УдалитьФайлы(Лок_ИмяФайла); //Не обязательно, у файла уникальное имя, но для общности
ЗаписьТекста = Новый ЗаписьТекста(Лок_ИмяФайла,КодировкаТекста.UTF8,,Ложь,Символы.ПС);
//Т = Новый ТекстовыйДокумент();
ЗаписьТекста.Записать(ТекстСопутствующих);
//Т.УстановитьТекст(ТекстСопутствующих);
//Т.Записать(Лок_ИмяФайла);
ЗаписьТекста.Закрыть();
Посмотрел в отладчике, в какой файл сохраняется временный файл: C:UsersUserAppDataLocalTemp50cfa3b5-8cf8-481d-aaa6-d0b2498d974d
Поиском нашел этот файл в каталоге:
Но увы, независимо от значения параметра Дописывать, 1С настойчиво добавляло BOM-кодировку:
Бюджет решения не позволялся углубляться в поиски, поэтому я сделал решение через ADODB.Stream, которое было написано в той же статье:
Лок_ИмяФайла = КаталогВременныхФайлов() + Строка(Новый УникальныйИдентификатор);
Лок_ИмяФайлаНач = Лок_ИмяФайла + «_Нач»;
ТекстСопутствующих = Обработки.дор_РассчетСопутствующихДляСайта.РассчитатьВФайл();Т = Новый ТекстовыйДокумент();
Т.УстановитьТекст(ТекстСопутствующих);
Т.Записать(Лок_ИмяФайлаНач);УбитьВОМ(Лок_ИмяФайлаНач, Лок_ИмяФайла);
…
Процедура
УбитьВОМ(ИсходныйФайл,РезультирующийФайл)
Попытка
файл = Новый ComObject(«ADODB.Stream»);
файл.Mode = 3; // r/w
файл.Type = 1; //1-Binary, 2-Text
файл.Open();
файл.LoadFromFile(ИсходныйФайл);
файл.Position = 3;
текстБезБОМ = Новый ComObject(«ADODB.Stream»);
текстБезБОМ.Mode = 3; // r/w
текстБезБОМ.Type = 1; //1-Binary, 2-Text
текстБезБОМ.Open();
файл.CopyTo(текстБезБОМ);
файл.Close();
текстБезБОМ.SaveToFile(РезультирующийФайл,2);
текстБезБОМ.Close();
УдалитьФайлы(ИсходныйФайл);
Исключение
Сообщить(ОписаниеОшибки(),СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
Наконец у меня получился чистый UTF, без BOM:
Потом почитал, что метод через ЗаписьТекста работает не на всех режимах совместимости.
У меня была УТ11, релиз платформы 8.3.16.1502, режим совместимости 8.3.14.
Время факт: 0.5 час.

Оказалось проблема в кодировке файла .json, т.к. студия сохраняет его по умолчанию не в Юникод, а, кто бы мог подумать — в Win1251 !
Сообщение было отмечено edward_jonson как решение







