кодировка в xml файле

Дима1991
Дата: 21.11.2012 09:40:58
Есть такой код, который мне тут ранее подсказали. Этот код из xml позволяет получить курсор. Если в xml кодировка указана 1251 то все работает, а если 1252 то в курсор выводятся непонятные символы. Как исправить ситуацию, чтобы и при кодировке 1252 выводились нормальные данные?

CREATE cursor tmp ( ;
	id I, ;
	id_sch I, ;
	vpolis I, ;
	spolis C(3), ;
	npolis C(16), ;
	fam C(30), ;
	im C(30), ;
	ot C(30), ;
	dr t, ;
	w I,;
	smo C(5), ;
	smo_db_opl C(6),;
	smo_in_fom C(6),;
	stat I, ;
	name_error C(50), ;
	kol_strax I, ;
	kol_uslugi N(5,2), ;
	kol_kd N(5,2), ;
	sumv N(10, 2), ;
	code_mo C(6), ;
	name_mo C(50), ;
	smo_tmp C(5)) 

	XMLTOCURSOR(cfile, "tmp", 512+8192)
Jonny540
Дата: 21.11.2012 11:34:46
Дима1991,

А если потом курсор обработать (сам не пробовал :)) ):
+
Расположенная в папке Visual FoxPro Tools\Cpzero, Cpzero.prg удаляет метку кодовой страницы из любого файла, который имеет табличную структуру файловая структура. После удаления метки Cpzero добавляет другую метку, которую вы определяете.

Обычно вы используете Cpzero с файлами других платформ или более ранних версий FoxPro. Если эти файлы не имеют метки кодовой страницы, когда вы их открываете, Visual FoxPro подсказывает вам кодовую страницу. Если вы неверно определили кодовую страницу,и данные в файлах отображаются неправильно, скорректируйте кодовую страницу, используя Cpzero.

DO Cpzero [WITH "filename"[, codepage_number]]

Параметры
filename
Определяет имя файла и должно быть ограничено одинарными или двойными кавычками. Если filename не включено, отображается диалоговое окно определения местоположения файла.

codepage_number
Определяет желаемый номер кодовой страницы. Если параметр не включен, будет показано диалоговое окно выбора кодовой страницы. Примечание:
Перед запуском Cpzero на таблице убедитесь, что она закрыта.

Пример
* Удалите кодовую страницу из MYFILE.DBF и установите новую кодовую страницу равной 437
*
DO Cpzero WITH 'MYFILE.DBF',437

Смотри также
CPCONVERT( ) Function
CPCURRENT( ) Function
CPDBF( ) Function
GETCP( ) Function
Utility Programs
SET CPDIALOG Command
SET NOCPTRANS Command
Дима1991
Дата: 21.11.2012 15:24:58
Jonny540,
DO Cpzero [WITH "filename"[, codepage_number]]
это нужно писать после создания курсора?
ВладимирМ
Дата: 21.11.2012 20:07:46
Вопрос в том, как FoxPro читает XML и что есть в XML. В самом XML есть какое-либо указание на то, в какой кодовой странице он сформирован? Может быть, проще будет сконвертировать содержимое XML. Как-то так

XMLTOCURSOR(CPConvert(1252, CPCurrent(), cfile), "tmp", 512+8192)
Beresnev
Дата: 21.11.2012 20:36:26
А в какой кодировке создается курсор tmp? Я бы попробовал CREATE CURSOR tmp CODEPAGE=1252 (.....).
Вместо XMLTOCURSOR можно использовать объект XMLAdapter. Он имеет возможности управлять кодовыми страницами на лету
при выгрузке XML-данных в курсор.
Ну и STRCONV() не следует забывать.
Jonny540
Дата: 22.11.2012 12:52:00
Дима1991
Jonny540,
DO Cpzero [WITH "filename"[, codepage_number]]
это нужно писать после создания курсора?
Желательно после.
Дима1991
Дата: 22.11.2012 13:22:32
ВладимирМ, В XML содержится следующее, ну тегов конечно побольше для примера один взял:
Если оставить такую кодировку, то при создании курсора или таблицы абракадабка получается, а если написать 1251 то нормально все
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<VFPData>
	<pacient_strax>
		<id>28141986</id>
		<id_sch>201210  050130201210</id_sch>
		<vpolis>1</vpolis>
		<spolis>МК</spolis>
		<npolis>000076189</npolis>
		<fam>Сергеев</fam>
		<im>Михаил</im>
		<ot>Игоревич</ot>
		<dr>1978-10-15T00:00:00</dr>
		<w>2</w>
		<smo>05501</smo>
		<stat>0</stat>
		<name_error>Отсутствует в СРЗ</name_error>
		<kol_strax>1</kol_strax>
		<kol_uslugi>4.00</kol_uslugi>
		<kol_kd>.00</kol_kd>
		<sumv>1269.45</sumv>
		<code_mo>050130</code_mo>
		<name_mo>Диагностика</name_mo>
	</pacient_strax>
</VFPData>
Дима1991
Дата: 22.11.2012 14:48:11
Beresnev, с курсор-адаптером не сталкивался никогда.. для текущего примера хотелось бы изменить этот момент, а то не хочется работающую программу исправлять заново.
ВладимирМ
Дата: 22.11.2012 14:58:28
Дима1991
ВладимирМ, В XML содержится следующее, ну тегов конечно побольше для примера один взял:
Если оставить такую кодировку, то при создании курсора или таблицы абракадабка получается, а если написать 1251 то нормально все
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>

А собственно содержимое файла действительно в кодировке 1252? Или это просто "бантик", а содержимое в кодировке 1251? Для проверки, попробуйте открыть XML как текстовый файл, но меняя кодовую страницу. Как-то так

modify file MyFile.xml as 1251
modify file MyFile.xml as 1252


И посмотрите, при какой кодировке содержимое будет "читабельное", а при какой - нет
Дима1991
Дата: 22.11.2012 15:05:43
ВладимирМ, я ж вам говорю если писать 1251 то все нормально, просто нам этот файл передают из ФОМСа и изначально он в кодировке 1252. Сейчас проверил, если писать так: modify file MyFile.xml as 1251 то нормально все, а если так modify file MyFile.xml as 1251
modify file MyFile.xml as 1252 то символы непонятные.. Просто чтобы каждый раз вручную не менять кодировку хотелось бы программно заложить чтобы читало в 1252 правильно