Каковы различные кодовые страницы EBCDIC для традиционного китайского языка?

Все, что я знаю, это кодовая страница 937 для традиционного китайского языка EBCDIC. CP937

Причина, по которой я спрашиваю, заключается в том, что у меня есть файл EBCDIC, который содержит традиционные китайские символы, но имеет поля и вопросительные знаки, когда я загружаю их в Oracle с использованием набора символов ZHT16DBCS (кодовая страница 937).

Дополнительное примечание: я не могу обработать файл, потому что он в формате EBCDIC и содержит традиционные китайские символы. Я хотел бы преобразовать его в UTF-8, чтобы я мог читать с помощью моего сценария (Perl), извлекать в несколько файлов и загружать файлы в несколько таблиц БД.


person criz    schedule 10.03.2017    source источник
comment
Как вы загружаете этот файл в БД?   -  person Wernfried Domscheit    schedule 10.03.2017
comment
Я загружаю это, используя sqldr и управляющий файл, но сначала устанавливаю набор символов. НАБОР СИМВОЛОВ ZHT16DBCS   -  person criz    schedule 10.03.2017
comment
Вы уверены, что ваш файл закодирован как CP937? Откуда вы взяли информацию о том, что набор символов Oracle ZHT16DBCS соответствует кодовой странице IBM CP937?   -  person Wernfried Domscheit    schedule 10.03.2017
comment
Спасибо. Я добавил ответ на ваш пост ниже по этой ссылке, где я его получил. docs.oracle.com/cd/B19306_01/gateways.102/ b16217/a_nls.htm   -  person criz    schedule 10.03.2017


Ответы (1)


Я не знаю, соответствует ли кодовая страница IBM CP937 набору символов Oracle ZHT16DBCS, соответственно. если Oracle вообще поддерживает CP937.

Я бы порекомендовал сделать преобразование в более распространенный набор символов, например. УТФ-8. Вы можете использовать, например, native2ascii, который часть Java SE.

Было бы так:

native2ascii your_input_file native_file.txt -encoding x-IBM937    
native2ascii native_file.txt your_input_file_in_utf8 -reverse -encoding UTF-8

или используя трубу, чтобы сделать это за один шаг:

cat your_input_file | native2ascii -encoding x-IBM937 | native2ascii -reverse -encoding UTF-8 > your_input_file_in_utf8

Затем перед запуском sqldr установите NLS_LANG соответственно:

SET NLS_LANG=.AL32UTF8 (Windows)

export NLS_LANG=.AL32UTF8 (Unix)

Просто примечание, территория и язык не имеют значения, поэтому вы можете их пропустить, если хотите (как это сделал я).

Конечно, в вашем контрольном файле вы должны установить

CHARACTERSET AL32UTF8

Еще одно замечание: кодировка «UTF-8» означает набор символов Oracle «AL32UTF8». Существует также набор символов Oracle с именем "UTF8", однако это CESU-8. . Для европейских языков их можно считать равными, однако для китайского они могут различаться.

person Wernfried Domscheit    schedule 10.03.2017
comment
Спасибо, но я получил это из документов оракула, когда искал наборы символов с EBCDIC и традиционным китайским языком. docs.oracle.com/cd/B19306_01/gateways.102/ b16217/a_nls.htm #M 937 = ZHT16DBCS shift # Традиционный китайский многобайтовый EBCDIC - person criz; 10.03.2017
comment
Именно тогда я попробовал ZHT16DBCS и предположил, что это 937. - person criz; 10.03.2017
comment
Да, я также нашел этот документ, но у вас есть сервер IBM DRDA? Я не знаю, применим ли Oracle Transparent Gateway для DRDA к SQL*Loader - я так не думаю. - person Wernfried Domscheit; 10.03.2017
comment
Нет, я не думаю, что у нас есть. Не могли бы вы объяснить, зачем мне нужно знать о сервере oracle DRDA и его назначении? - person criz; 10.03.2017
comment
Я обратил внимание на ваше предложение использовать Java SE для преобразования файла в utf8, но, к сожалению, в AIX 6.1 не установлена ​​Java. Придется устанавливать вручную. - person criz; 10.03.2017