|
v7: Как записать текст в кодировке UTF-8? | ☑ | ||
---|---|---|---|---|
0
katerinaUniv
20.02.15
✎
09:14
|
Доброго времени суток! Пытаюсь записать текстовые составляющие в xml в кодировке UTF-8, в итоге при открытии файла вместо, например, наименования контрагента кракозябры. Использую метод ANSITOOEM(). До этого использовала встроенную функцию с таким кодов:
Длина=СтрДлина(Стр); Итог=""; Для Н=1 По Длина Цикл Знак=Сред(Стр,Н,1); Код=КодСимв(Знак); Если Код<128 Тогда //Изменено АйТи-Штурман - начало Если (код = 42) Или (код = 36) Или (код = 40) Или (код = 41) Тогда Продолжить; //не берем * и $ Иначе Итог=Итог+Знак; КонецЕсли; //Изменено АйТи-Штурман - конец Иначе Если (Код>=КодСимв("А"))И(Код<=КодСимв("п")) Тогда Итог=Итог+Симв(208)+Симв(144+Код-КодСимв("А")); ИначеЕсли (Код>=КодСимв("р"))И(Код<=КодСимв("я")) Тогда Итог=Итог+Симв(209)+Симв(128+Код-КодСимв("р")); ИначеЕсли (Знак="ё") Тогда Итог=Итог+Симв(209)+Симв(145); ИначеЕсли (Знак="Ё") Тогда Итог=Итог+Симв(208)+Симв(129); КонецЕсли; КонецЕсли; КонецЦикла; Возврат Итог; Выгружаю файл из ТИС 7.7 сильно доработанной, Клиент-сервер MS SQL |
|||
1
katerinaUniv
20.02.15
✎
09:15
|
помогите, если кому не сложно и кто сталкивался
|
|||
2
1Сергей
20.02.15
✎
09:18
|
воспользуйся лучше TextStream
|
|||
3
katerinaUniv
20.02.15
✎
09:28
|
(2) так?
ADODBStream = CreateObject("ADODB.Stream"); ADODBStream.Type = 2; ADODBStream.Charset = "windows-1251"; ADODBStream.Open(); ADODBStream.LoadFromFile(стр); Text = ADODBStream.ReadText(стр); ADODBStream.Close(); ADODBStream.Charset = "UTF-8"; ADODBStream.Open(); ADODBStream.WriteText(Text); ADODBStream.SaveToFile (итог, 2); ADODBStream.Close(); возврат итог; |
|||
4
Cube
20.02.15
✎
09:29
|
Процедура СменитьКодировкуФайлаНаUTF8(ИмяФайла)
Байт = 255; СтримВход = СоздатьОбъект("ADODB.Stream"); СтримВход.Type = 2; СтримВход.charset = "windows-1251"; СтримВход.Open(); СтримВход.LoadFromFile(ИмяФайла); СтримВыход = СоздатьОбъект("ADODB.Stream"); СтримВыход.Type = 2; СтримВыход.charset = "utf-8"; СтримВыход.LineSeparator = -1; СтримВыход.Open(); Всего = СтримВход.size; Пока СтримВход.EOS = 0 Цикл СтримВыход.WriteText(СтримВход.ReadText(Байт), ?(Байт = -2, 1, 0)); КонецЦикла; СтримВыход.SaveToFile(ИмяФайла, 2); КонецПроцедуры //СменитьКодировкуФайлаНаUTF8() |
|||
5
katerinaUniv
20.02.15
✎
09:31
|
так мне надо строкое значение в xml поменять
|
|||
6
katerinaUniv
20.02.15
✎
09:33
|
(4)где можно почитать о методах этого объекта, мне надо строковое значение сконвертировать в UTF-8 и кинуть в xml
|
|||
7
ДенисЧ
20.02.15
✎
09:46
|
(6) Извините, а в Астрахани гугль запрещён?
|
|||
8
katerinaUniv
20.02.15
✎
10:03
|
(7) ищу уже давно, но не получается
|
|||
9
vasbur
20.02.15
✎
10:04
|
(8) в MSDN надо искать
|
|||
10
igork1966
20.02.15
✎
10:06
|
Что это было? ;-()
|
|||
11
katerinaUniv
20.02.15
✎
10:07
|
(9) нашла вот такой вариант: есть exe файл, который перекодирует все в utf
|
|||
12
katerinaUniv
20.02.15
✎
10:07
|
(9) теперь вопрос: как запустить exe из обработки?
|
|||
13
igork1966
20.02.15
✎
10:24
|
Я чего-то не пойму... а чем v7plus.dll не устраивает?
Зачем такие пляски с бубном? |
|||
14
Pers0naGrata
20.02.15
✎
10:30
|
<code>
Функция глПреобразоватьСтрокуВ_UTF8( Стр ) Экспорт Итог = ""; Длина = СтрДлина( Стр ); Для Сч = 1 По Длина Цикл Знак = Сред( Стр, Сч, 1 ); Код = КодСимв( Знак ); Если Код < 128 Тогда Итог = Итог + Знак; Иначе Если ( Код >= КодСимв( "А" ) ) И ( Код <= КодСимв( "п") ) Тогда Итог = Итог + Симв( 208 ) + Симв( 144 + Код - КодСимв( "А" ) ); ИначеЕсли ( Код >= КодСимв( "р" ) ) И ( Код <= КодСимв( "я" ) ) Тогда Итог = Итог + Симв( 209 ) + Симв( 128 + Код - КодСимв( "р" ) ); ИначеЕсли Знак = "ё" Тогда Итог = Итог + Симв( 209 ) + Симв( 145 ); ИначеЕсли Знак="Ё" Тогда Итог = Итог + Симв( 208 ) + Симв( 129 ); КонецЕсли; КонецЕсли; КонецЦикла; Возврат Итог; КонецФункции // глПреобразоватьСтрокуВ_UTF8 Функция глПреобразоватьСтрокуИзUTF8( Стр ) Экспорт Итог = ""; Длина = СтрДлина( Стр ); Для Сч = 1 По Длина Цикл Знак = Сред( Стр, Сч, 1 ); Код = КодСимв( Знак ); Если Код < 128 Тогда Итог = Итог + Знак; ИначеЕсли ( Код >= 128 ) И ( Код < 192 ) Тогда Иначе Сч = Сч + 1; Знак2 = Сред( Стр, Сч, 1 ); Код2 = КодСимв( Знак2 ); Если Код = 208 Тогда Если Код2 = 129 Тогда Итог = Итог + "Ё"; Иначе Итог = Итог + Симв( КодСимв( "А" ) + Код2 - 144 ); КонецЕсли; ИначеЕсли Код = 209 Тогда Если Код2 = 145 Тогда Итог = Итог + "ё"; Иначе Итог = Итог + Симв( КодСимв( "р" ) + Код2 - 128 ); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Возврат Итог; КонецФункции // глПреобразоватьСтрокуИзUTF8 </code> |
|||
15
katerinaUniv
20.02.15
✎
10:35
|
(14) такое пробовала, не помогло. сейчас не стала выполнять перекодировку, начал файл открываться с ошибкой на строку 5 колонку 23. это получается буква "В". Если файл перекодировать (запускаю exe из командной строки), то все равно та же ошибка. начало файла выглядит так:
<?xml version="1.0" encoding="utf-8"?> <DISTR_CONN_ID ID="022"> <CUSTOMER> <SOLD_TO> <CLIENT_CODE>ВБО01643</CLIENT_CODE> <STATUS>0</STATUS> <CLIENT_NAME> Абраева(рАСШИФрОВАТЬ)</CLIENT_NAME> <INN></INN> <KPP></KPP> <CREDIT_LIMIT>0</CREDIT_LIMIT> <TIME_LIMIT>0</TIME_LIMIT> <PRICE_LIST_TYPE>T</PRICE_LIST_TYPE> <PRICE_LIST_DESCR></PRICE_LIST_DESCR> <ADDRESS> <COUNTRY CODE="RU" NAME="Россия" /> <REGION CODE="83009239-25cb-4561-af8e-7ee111b1cb73" NAME="Астраханская обл" /> <CITY CODE="" NAME="" /> раньше ругался файл на символы * $ |
|||
16
katerinaUniv
20.02.15
✎
10:40
|
(15) вот текст ошибки
error on line 5 at column 23: Encoding error |
|||
17
katerinaUniv
20.02.15
✎
10:56
|
я уже и не знаю, что пробовать
|
|||
18
Pers0naGrata
20.02.15
✎
11:29
|
Попробовал
<code> Текст = СоздатьОбъект( "Текст" ); Текст.КодоваяСтраница( 0 ); Текст.ДобавитьСтроку( глПреобразоватьСтрокуВ_UTF8( "<CLIENT_CODE>ВБО01643</CLIENT_CODE>" ) ); Текст.Записать( "E:/temp.txt" ); </code> Открываю. Все замечательно: файл в кодировке UTF8. |
|||
19
katerinaUniv
20.02.15
✎
14:12
|
(18)тупила, признаю... ошибка была в том, что передавались значения типа null
|
|||
20
katerinaUniv
20.02.15
✎
14:12
|
большое спасибо за помощь и примеры!!!
|
|||
21
Torquader
22.02.15
✎
01:17
|
А в чём проблема в написании через стандартную запись текста ? В том, что русские буквы нужно переводить ?
|
|||
22
ДенисЧ
22.02.15
✎
09:21
|
(21) в том, что тема в разделе 77 )
А там нету ни ЗаписиТекста, ни уникода. |
|||
23
spectre1978
22.02.15
✎
09:31
|
Ребят, а зачем так хлопотно-то? Я всегда делал в семерке вот так
Парсер = СоздатьОбъект ("AddIn.XMLParser"); Док = Парсер.СоздатьДокумент (); Док.Кодировка = "utf-8"; Док.ЗагрузитьИзСтроки ("<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes"" ?> <XML> </XML>"); Корень = Док.ВыбратьУзел ("XML"); ... действия по заполнению документа. Передаем обычные ... семерочные строки без какой-либо конвертации Док.Записать (ИмяФайла); и все получалось в той кодровке какой надо. Ведь V7Plus парсер это просто обертка над MS XML Parser, и вполне оно UTF8 умеет. |
|||
24
igork1966
22.02.15
✎
10:43
|
(23) я их еще в (13) об этом спросил... но пути изобретателей велосипедов неисповедимы ;-)
|
|||
25
Torquader
22.02.15
✎
15:17
|
(22) Так я вижу, что семёрка.
т=СоздатьОбъект("Текст"); т.ДобавитьСтроку(РусскиеВДваСимвола(лстр)); В функции Функция РусскиеВДваСимвола(пстр) лчД=СтрДлина(пстр); лстрРез=""; Для лч=1 По лчД Цикл лчКод=КодСимвола(Сред(пстр,лч,1)); Если лчКод<128 Тогда лстрРез=лстрРез+Симв(лчКод); Иначе лстрРез=лстрРез+ммПереводСимвола(лчКод-127); КонецЕсли; КонецЦикла; Возврат лстрРез; КонецФункции Просто, в Unicode стандартными методами не записать, так как семёрка не умеет записывать символ с кодом 0, а в UTF-8 таковые и не нужны. Удачи. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |