powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
11 сообщений из 11, страница 1 из 1
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34300359
AlexF2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hello!

Есть DBF в котором одна колонка на корейском языке в 949-ой кодовой странице и нужно эту табличку со всеми колонками залить в SQL 2005. Пробовал в SSIS через OLE DB провайдеры для Foxpro и Jet 4, CP везде проставил 949, но конвертируется колонка одинаково неправильно. Тот же результат при импорте в Access и Excel: └╧╣▌┴Ў┐к.

Jet 4 оказался гораздо резвее и он сразу выдавал WSTR вместо STR, Поэтому я остановился в итоге на нём.
Выставил конекшн стринг с указанием корейской CP: "Data Source=C:\Work\Data\CATALOG_TEXT\;Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV;Locale Identifier=949;"

Проблема лечится, если в виндовой панели управления в "Regional and Language options" on Advanced tabstrip: "language version of the non-Unicode programs" поставить корейскую CP и перегрузить винды (у меня Win2003 Server). Тогда Access, Excel и SSIS правильно конвертируют корейское поле в юникод и всё OK.

Неужели никак нельзя настроить OLE DB провайдер, чтобы он правильно конвертил 949-ю CP в юникод?

Thanks and good luck!
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34300519
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем-то, Microsoft.Jet.OLEDB.4.0 не имеет никакого отношения к фоксу. Хотя и может работать с файлами одного с ним формата. Фокс этим драйвером не пользуется.
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34300558
Мысль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЕсть DBF в котором одна колонка на корейском языке...
Круто ! Я уж грешным делом думал, что кодовая страница устанавливается для всей таблицы и прописывается в заголовке. ...
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34302047
Solmyr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж вы о Foxe, то в нем есть функция CPCONVERT.
И еще. А где вы правильно видите, что есть в этой колонке, и как понимаете, что вот это оно и есть то, что должно быть?
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34302139
AlexF2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!

Понять-то не сложно. При открытии этого DBF в Foxpro колонка рендерится неправильно, но если в виндовой панели управления выставить карейскую кодовую страницу для non-unicode applications и перегрузить винды (WIn srv. 2003), то Foxpro показывается там корейские иероглифы. Правильность я проверил скопировав образцы в http://www.google.ru/language_tools?hl=ru
и подсунув их переводчику Корейский-->английский.
Однако напрямую оно через клипбоард не копируется: сначала это добро надо вставить в Notepad, а из него уже в переводчик.
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34302260
AlexF2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати: Foxpro у меня 6-ой (от 6-ой студии), и на нём стоит SP5 для студии.

Я не понимаю почему сам Fox использует неправильную CP. Ведь она же прописана в DBF.
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34302304
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "колонка рендерится"? Коды символов в поле правильные? Шрифт в фоксе выставлен правильный? И еще. Фокс юникод не поддерживает. Потому преобразования надо проводить явно.
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34302560
AlexF2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рендерится = показывается

показывается она правильно только если виндам поставить Корейскую non-unicode CP

Settings. COntrol Panel. Regional and Language Options. Advanced
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34302587
AlexF2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тесть - сам-то DBF содержит property с 949 CP, но все: Foxpro 6, OLE DB prov. для Fox 9, OLE DB prov. для Jet 4 - игнорируют его. Они перекодируют расширенные символы ASCII используя системную CP для non-unicode приложений.

И я не нашёл способа заставить их использовать нужную мне CP.
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34302709
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все правильно. Неюникодные программы сами конвертить ничего не будут.
Функцию StrConv() смотрел? Пробовал? Сказано же, что надо производить конвертацию явно .
...
Рейтинг: 0 / 0
Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
    #34303418
AlexF2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, мне надо правильно прочитать эти данные из DBF и заимпортить в MS SQL 2005 в поле типа NVARCAHR, поэтому я решил проблему следующим образом:

законнектился к DBF через OLE DB Provider for Jet 4.0 при помощи следующей строки:

connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\CATALOG_TEXT\;Persist Security Info=False;Extended Properties=dBASE 5.0;"

Прочитав данные в DataTable при помощи TableAdapter (.Net 2.0 / C#; WInForms app) я выполнил следующую процедуру конверсии:

private void Form1_Load(object sender, EventArgs e)
{
this.bi02ctlvTableAdapter.Fill( this.xxxDs.bi02ctlv );


//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage = ANSI
//1251

//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage = OEM
//866
ConvertAsciiToUnicode( xxxDs.bi02ctlv, "area_name", 1251, 949 );
}

static private void ConvertAsciiToUnicode( DataTable tbl, String fieldName, Int32 rawEnc, Int32 unicodeEnc )
{
Encoding srcEnc = ASCIIEncoding.GetEncoding( rawEnc );
Encoding dstEnc = ASCIIEncoding.GetEncoding( unicodeEnc );
Int32 idx = tbl.Columns.IndexOf( fieldName );

foreach( DataRow row in tbl.Rows )
{
Byte[] mbcs = srcEnc.GetBytes( (String)row[idx] );
String res = dstEnc.GetString( mbcs );
row[ idx ] = res;
}
}

При этом в реестре я выставил HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage = ANSI

И всё стало OK! Я получил правильный Unicode.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт DBF содержащего корейское поле (CP 949) в MS SQL 2005
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]