purebasic.info

PureBasic forum
Текущее время: Вс сен 23, 2018 1:42 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 3:41 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Из справки
Цитата:
History

25th July 2016 : Version 5.50

- Added: UTF8() and Ascii() to create easily UTF8 and Ascii string buffers (needs to be freed with FreeMemory())

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 4:01 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
версии 5.50, к сожалению, не имею, есть 5.31 и в ней приведенные коды дают кракозябры
странно, но мой вариант у меня работает! правда:
открыл созданный файл в виртуалкеИзображение - беда
напомню: дело происходит в xUbuntu


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 5:39 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Код загрузки. По аналогии нужно написать код сохранения.


Вложения:
xml.zip [2.22 KiB]
Скачиваний: 53

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 6:45 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Сохранение XML.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Procedure.s ConvUnicode_1251(Array OutBuff.a(1), *Buff.ArrU, Size)
   
  If Size>0
   
    Size-1
   
    If ArraySize(OutBuff()) <> Size
      ReDim OutBuff(Size)
    EndIf
   
    For i=0 To Size
      If *Buff\arr[i] = 1025 ; Ё
        OutBuff(i) = 168
      ElseIf *Buff\arr[i] = 1105 ; ё
        OutBuff(i) = 184
      ElseIf *Buff\arr[i] < 192
        OutBuff(i) = *Buff\arr[i]
      ElseIf *Buff\arr[i] >= 1040 And *Buff\arr[i] <= 1103
        OutBuff(i) = 192 + (*Buff\arr[i] - 1040)
      Else
        OutBuff(i) = 32
      EndIf
    Next
   
  EndIf
 
EndProcedure
 
 
Procedure SaveXML_1251(XML, FileName.s)
 
  Dim OutBuff.a(0)
 
  If IsXML(XML)
   
    SetXMLEncoding(XML, #PB_Unicode)
    s.s = ComposeXML(XML, #PB_XML_StringFormat)
   
    s = ReplaceString(s, "encoding="+Chr(34)+"UTF-16"+Chr(34),
                      "encoding="+Chr(34)+"windows-1251"+Chr(34), #PB_String_CaseSensitive, 1, 1)
   
    ConvUnicode_1251(OutBuff(), @s, Len(s))
   
    f=CreateFile(#PB_Any, FileName)
    If f
      WriteData(f, @OutBuff(), ArraySize(OutBuff())+1)
      CloseFile(f)
    EndIf
   
  EndIf
 
EndProcedure


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Сб янв 07, 2017 9:57 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Петр, спасибо, буду разбираться, мелкому 7 месяцев не могу сидеть у компа больше 5 минут подряд....


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Пн янв 09, 2017 10:05 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр, что-то я туплю... передается указатель на, неизвестно откуда взявшуюся структуру *Buff.ArrU
потом из этой? структуры используются элементы массива *Buff\arr[i]
растолкуй, что мне нужно объявить ещё...
я понимаю, что должно происходить так: передаём указатель на строку, а в процедуре проверяем байт за байтом этой строки, но как это должно выглядеть не догоняю.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Вт янв 10, 2017 12:36 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
Структура здесь viewtopic.php?p=86141#p86141
В код из архива нужно добавить код из сообщения.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Вт янв 10, 2017 1:04 am 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
вот, что получается при открытии файла temp.xml
https://yadi.sk/i/rTSoof0A385hQT


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Вт янв 10, 2017 10:56 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
В Mint 17 все нормально.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Вт янв 10, 2017 2:55 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пётр, где при открытии файла вызывается Conv1251_Unicode(*Buff.ArrA, Size)?!
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Procedure LoadXML_1251(XML, FileName.s)
  r=0
  f = ReadFile(#PB_Any, FileName)
  If f
    l.q = Lof(f)
    If l>0
      Dim Buff.a(l)
      ReadData(f, @Buff(), l)
                        $ = PeekS(@Buff(), l, #PB_Ascii)
      String$ = ReplaceString(String$, "encoding="+Chr(34)+"windows-1251"+Chr(34),
                              "encoding="+Chr(34)+"UTF-16"+Chr(34), #PB_String_CaseSensitive, 1, 1)
      Debug String$
      r = ParseXML(XML, String$)
    EndIf
    CloseFile(f)
  EndIf
  ProcedureReturn r
EndProcedure


получается, что парсится неперекодированный текст?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Вт янв 10, 2017 4:06 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11255
Благодарил (а): 4 раз.
Поблагодарили: 429 раз.
amer писал(а):
где при открытии файла вызывается Conv1251_Unicode(*Buff.ArrA, Size)?!
Архив точно скачивал? viewtopic.php?p=86141#p86141
В нем процедура выглядит по другому
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Procedure LoadXML_1251(XML, FileName.s)
  r=0
 
  f = ReadFile(#PB_Any, FileName)
  If f
   
    l.q = Lof(f)
    If l>0
     
      Dim Buff.a(l)
      ReadData(f, @Buff(), l)
     
      ; String$ = PeekS(@Buff(), l, #PB_Ascii)
      String$ = Conv1251_Unicode(@Buff(), l)
     
      String$ = ReplaceString(String$, "encoding="+Chr(34)+"windows-1251"+Chr(34),
                              "encoding="+Chr(34)+"UTF-16"+Chr(34), #PB_String_CaseSensitive, 1, 1)
      Debug String$
      r = ParseXML(XML, String$)
     
    EndIf
   
    CloseFile(f)
  EndIf
 
  ProcedureReturn r
EndProcedure
 


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: XML в кодировке 1251
СообщениеДобавлено: Вт янв 10, 2017 5:10 pm 
Не в сети
док

Зарегистрирован: Ср янв 15, 2014 2:21 pm
Сообщений: 76
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Невнимательность... простите :oops:


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB