Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не импортируются данные на русском языке из xml  [new]
wbMarvin
Member

Откуда:
Сообщений: 11
Здраствуйте.
Импортирую данные из xml-файла в базу данных SQL Server'а. Всё хорошо импортируется, но если в xml файле есть атрибуты, в значения которых установлены русские символы, например: TOWN="Москва", то импорт проваливается и выдаётся ошибка:
<?xml version="1.0"?><Result State="FAILED"><Error><HResult>0xC00CEE2B</HResult><Description><![CDATA[Illegal xml character.
]]></Description><Source>XML SAX Parser</Source><Type>FATAL</Type></Error></Result>
Русских символов нет и ошибки нет. Подскажите пожалуйста, что необходимо сделать, чтобы выполнялся импорт и русских данных.?
19 окт 09, 19:48    [7808054]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
wbMarvin
<?xml version="1.0" encoding="???" ?>
Может у вас сам файл инвалидный, встречаемые в нём символы (русские) не удовлетворяют заявленной кодировке файла. Вы о ней даже не упомянули.
19 окт 09, 21:58    [7808480]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
wbMarvin
Member

Откуда:
Сообщений: 11
Да, я забыл упомянуть, извините.
у меня стояла UTF-8 и не работало, я поменял на windows-1252 и импорт сработал, правда в базу данных скопировалось следующее Eaaiu?ee. С чем это связано?
19 окт 09, 22:28    [7808556]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
wbMarvin
Member

Откуда:
Сообщений: 11
Может быть, эти кодировки обе не подходят? Тогда подскажите, пожалуйста, какой стоит пользоваться?
19 окт 09, 22:29    [7808560]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
wbMarvin
... я поменял ... эти кодировки обе не подходят? Тогда подскажите, пожалуйста, какой стоит пользоваться?
Стоит правильно пользоваться правильными редакторами.
Сам encoding ничего не гарантирует, он просто декларирует, что с данным файлом нужно работать в данной кодировке. Плохому текстовому редактору до фени, что там написано, он може прочитать и записать данные в ему лично удобной кодировке.
Откройте ваш файл в каком-то XML валидаторе, например в браузере. И убедитесь, что он валидный и что данные в нём правильно сели.
19 окт 09, 23:04    [7808675]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
wbMarvin
Member

Откуда:
Сообщений: 11
1251 работает - нашёл через браузер, как вы и посоветовали.
Спасибо за помощь.
19 окт 09, 23:20    [7808706]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
ЛиП
Member

Откуда:
Сообщений: 348
и от меня пасиб. на той неделе задал такой же вопрос. Никто не ответил. А оно вона че оказываеццо
20 окт 09, 13:41    [7811382]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Не импортируются данные на русском языке из xml  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
у меня фигня какая-то вот с этим:

http://www.cbr.ru/scripts/XML_daily.asp?date_req=02/03/2002

в эксплорере открывается кормально, ко когда я сохраняю контент в виде файла на диске, а потом в пакете пытаюсь залить в БД, то русский пишется крокозябрами.

да и если сохраненный xml открыть в том же самом эксплорере, то те же самые крокозябры.

к примеру

<Valute ID="R01010"> <NumCode>036</NumCode> <CharCode>AUD</CharCode> <Nominal>1</Nominal> <Name>Австралийский доллар</Name> <Value>16,0102</Value> </Valute>

отображается как

<Valute ID="R01010"> <NumCode>036</NumCode> <CharCode>AUD</CharCode> <Nominal>1</Nominal> <Name>Австралийский доллар</Name> <Value>16,0102</Value> </Valute>

как мне это разрулить?
23 сен 12, 17:18    [13209270]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Shurgenz
если сохраненный xml открыть в том же самом эксплорере, то те же самые крокозябры
При чём тут SQL?
Тут вправляют кривые руки по MSSQL, кривые руки в познании работы с текстовыми файлами, и вообще базовые вещи - это в школу обращайтесь.

Файл (в отличе от скуля и сред работы) не имеет понятия о кодировке. Вы должны указывать кодировку (в шапке файла), а далее сохранять и читать файл в данной кодировке.
Зачем это делать руками? Пусть закачка делается автоматом, сразу в правильном виде. Может даже вообще без файла (меньше мороки).
23 сен 12, 17:39    [13209362]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
Shurgenz
в эксплорере открывается кормально, ко когда я сохраняю контент в виде файла на диске, а потом в пакете пытаюсь залить в БД, то русский пишется крокозябрами.

да и если сохраненный xml открыть в том же самом эксплорере, то те же самые крокозябры.
В опере нормально сохранился и открылся

В IE 9 тоже.
23 сен 12, 17:44    [13209386]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
Mnior
Shurgenz
если сохраненный xml открыть в том же самом эксплорере, то те же самые крокозябры
При чём тут SQL?
Тут вправляют кривые руки по MSSQL, кривые руки в познании работы с текстовыми файлами, и вообще базовые вещи - это в школу обращайтесь.

Файл (в отличе от скуля и сред работы) не имеет понятия о кодировке. Вы должны указывать кодировку (в шапке файла), а далее сохранять и читать файл в данной кодировке.
Зачем это делать руками? Пусть закачка делается автоматом, сразу в правильном виде. Может даже вообще без файла (меньше мороки).


При том SQL, что в SSIS пытаюсь сделать джобу.

alexeyvg
В опере нормально сохранился и открылся

В IE 9 тоже.


попробуйте сохранить в текстовый файл, назвать его temp.xml к примеру, и открыть в эксплорере

я это делаю не сам, а в скрипте:

public void Main()
		{
            string RemoteURI;
            string LocalFileName;
            string response;

            RemoteURI = Dts.Variables["URL"].Value.ToString()+Dts.Variables["date"].Value.ToString();

            
            try
            {
                LocalFileName = "C:\\temp\\data.xml";

                using (StreamWriter outfile = new StreamWriter(LocalFileName))
                    {
                        outfile.AutoFlush = true;
                        response = DownloadString(RemoteURI);
                        outfile.Write(response);
                    }

                Dts.TaskResult = (int)ScriptResults.Success;
            }

            catch (Exception ex)
            {
                // Catch and handle error 
                Dts.Events.FireError(0, String.Empty, ex.Message, String.Empty, 0);
                Dts.TaskResult = (int)ScriptResults.Failure;
            }

		}

        private static string DownloadString(string address)
        {
            string strWebPage = "";
            // create request 
            System.Net.WebRequest objRequest = System.Net.HttpWebRequest.Create(address);
            // get response 
            System.Net.HttpWebResponse objResponse;
            objResponse = (System.Net.HttpWebResponse)objRequest.GetResponse();
            // get correct charset and encoding from the server's header 
            string Charset = objResponse.CharacterSet;
            //Encoding encoding = Encoding.GetEncoding(Charset);
            Encoding encoding = Encoding.GetEncoding("windows-1251");
            // read response into memory stream 
            MemoryStream memoryStream;
            using (Stream responseStream = objResponse.GetResponseStream())
            {
                memoryStream = new MemoryStream();

                byte[] buffer = new byte[1024];
                int byteCount;
                do
                {
                    byteCount = responseStream.Read(buffer, 0, buffer.Length);
                    memoryStream.Write(buffer, 0, byteCount);
                } while (byteCount > 0);
            }

            // set stream position to beginning 
            memoryStream.Seek(0, SeekOrigin.Begin);

            StreamReader sr = new StreamReader(memoryStream,encoding);
            strWebPage = sr.ReadToEnd();

            // dispose the first stream reader object 
            sr.Close();

            return strWebPage;
        } 


кодировку windows-1251 взял из самого xml-я. Сам сохраненный файл в нотепаде отображается нормально, а при попытке открыть в эксплорере - с крокозябрами. голову сломал уже
23 сен 12, 18:01    [13209432]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
qwerty112
Guest
Shurgenz,

http://msdn.microsoft.com/ru-ru/library/system.io.streamwriter.encoding.aspx
StreamWriter.Encoding - свойство
Значение свойства
Тип: System.Text.Encoding
Кодировка Encoding, указанная в конструкторе для текущего экземпляра, или UTF8Encoding, если кодировка не задана.
23 сен 12, 18:17    [13209464]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
Shurgenz
alexeyvg
В опере нормально сохранился и открылся

В IE 9 тоже.


попробуйте сохранить в текстовый файл, назвать его temp.xml к примеру, и открыть в эксплорере
Ну а я как сделал???
Shurgenz
я это делаю не сам, а в скрипте:
Так наверное проблема в ошибке в скрипте?
Shurgenz
кодировку windows-1251 взял из самого xml-я. Сам сохраненный файл в нотепаде отображается нормально, а при попытке открыть в эксплорере - с крокозябрами. голову сломал уже
Дык всё таки - файл сохранился правильный или нет? Или вы его и не смотрели?
23 сен 12, 18:23    [13209489]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
Shurgenz
При том SQL, что в SSIS пытаюсь сделать джобу.
В SSIS нельзя делать джобов :-)
23 сен 12, 18:24    [13209500]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
alexeyvg
Дык всё таки - файл сохранился правильный или нет? Или вы его и не смотрели?


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

alexeyvg
Shurgenz
При том SQL, что в SSIS пытаюсь сделать джобу.
В SSIS нельзя делать джобов :-)

не цепляйтесь к словам :) конечно же пакет
23 сен 12, 18:59    [13209633]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
Shurgenz
alexeyvg
Дык всё таки - файл сохранился правильный или нет? Или вы его и не смотрели?

Сохранился он странно, в текстовом редакторе вроде правильный, в эксплорере - крокозябры вместо русского
То есть он до буквы совпадает с тем файлом, который сохраняется из эксплорера?

Файл, который сохраняется из эксплорера, тоже им неправильно открывается?

Русские буквы правильные, байты смотрели, они в кодировке 1251? Заголовок правильный?
23 сен 12, 19:03    [13209655]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
вот, такой файл получился

К сообщению приложен файл (data.xml - 3Kb) cкачать
23 сен 12, 19:06    [13209671]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
qwerty112
Guest
Shurgenz
alexeyvg
Дык всё таки - файл сохранился правильный или нет? Или вы его и не смотрели?


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

...эээмм, а что - "не дошло" ? 13209464

"сохранился он" в кодировке UTF-8,
можеш даже проверить, в том же нотепаде, - открой файл, после программного сохранения, и выбери "Сохранить как" - там по-умолчанию будет текущая кодировка - "UTF-8"

а эксплорер, - "пытается" вывести в "заявленной" кодировке - "windows-1251"
23 сен 12, 19:07    [13209677]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31865
qwerty112
...эээмм, а что - "не дошло" ? 13209464

"сохранился он" в кодировке UTF-8,
+1

Вообще нужно как то научиться работать с файлами, может, FAR установить. Без этого будет тяжело.
23 сен 12, 19:10    [13209689]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
Shurgenz
Member

Откуда: Питер
Сообщений: 1938
Согласен, поработать бы с файлами научиться :)

поменял в строке на UTF-8 и все заработало

try
            {
                LocalFileName = "C:\\temp\\data.xml";
                //encoding.CodePage = Encoding.GetEncoding("Windows-1251").CodePage; 
                
                using (StreamWriter outfile = new StreamWriter(LocalFileName))
                {
                    outfile.AutoFlush = true;
                    response = DownloadString(RemoteURI);
                    StringBuilder sb = new StringBuilder(response);
                    sb.Replace("windows-1251", "UTF-8");
                    outfile.Write(sb.ToString());
                }


                Dts.TaskResult = (int)ScriptResults.Success;
            }


скорее всего есть способ лучше конечно
23 сен 12, 19:48    [13209781]     Ответить | Цитировать Сообщить модератору
 Re: Не импортируются данные на русском языке из xml  [new]
qwerty112
Guest
Shurgenz
...
скорее всего есть способ лучше конечно

ну конечно есть, (вроде ж уже 2-ажды сказал, даже ...)
StreamWriter нужно создавать с нужной кодировкой (ASCII)

http://msdn.microsoft.com/ru-ru/library/system.io.streamwriter.streamwriter.aspx
StreamWriter(Stream, Encoding) Инициализирует новый экземпляр класса StreamWriter для указанного потока, используя заданную кодировку и размер буфера по умолчанию.
24 сен 12, 09:27    [13210828]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить