Pl sql developer кодировка: кодировка — Кракозябры в PL/SQL Developer

Кириллица в клиенте Oracle Database – gee12

gee12

Очередная статья на эту тему, но с некоторыми уточнениями.

 

Имеем:

Windows 7 x64

СУБД Oracle Database XE

ODBC-драйвер для работы с Oracle Database

Стороннее ПО, использующее ODBC-подключение к БД

 

Проблема: 

Знаки вопроса при отображении кириллицы в клиентском ПО, а также иероглифы при отображении кириллицы в SQLPlus.

 

 

 

 

 

 

 

 

 

Как оказалось:

В системе должна быть правильно установлена переменная NLS_LANG, отвечающая за языковые настройки. Формат описания параметра NLS_LANG:

<Язык>_<Территория>.<Кодировка>

, где:

  <Язык> – AMERICAN/RUSSIAN и др.

  <Территория> – AMERICA/RUSSIA/CIS и др.

  <Кодировка> – CL8MSWIN1251/CL8KOI8R/RU8PC866/AL32UTF8/UTF8 и др.

 

ПРИМЕЧАНИЕ: Непосредственно на кодирование символов влияет только <кодировка>, указанная после точки.

 

При каждом клиентском соединении с БД Oracle задаются и потом используются параметры сессии (таблица NLS_SESSION_PARAMETERS). Проверить их значение для текущей сессии можно запросом:

SQLPLUS> SELECT * FROM NLS_SESSION_PARAMETERS;



SQLPLUS> SELECT * FROM NLS_SESSION_PARAMETERS;

Для утилиты SQLPlus можно задать нужные языковые настройки несколькими способами (в порядке уменьшения приоритетности):

1) Выполнить ALTER SESSION в самом клиентском приложении, например:

SQLPLUS> ALTER SESSION SET NLS_LANGUAGE= ‘RUSSIAN’;



SQLPLUS> ALTER SESSION SET NLS_LANGUAGE= ‘RUSSIAN’;

2) Установить NLS_LANG в текущем терминальном сеансе cmd или bat-файле.

Получить:

> set NLS_LANG
NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251



> set NLS_LANG

NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251

Установить:

> SET NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251



> SET NLS_LANG=RUSSIAN_RUSSIA.CL8MSWIN1251

3) Установить NLS_LANG в переменной окружения системы:

Свойства системы => Переменные среды => Создать переменную среды пользователя

4) Установить NLS_LANG в ключе ветки реестра:


HKEY_LOCAL_MACHINE\SOFTWARE\oracle\KEY_XE

 

Но при этом, если мы установим кодировку в NLS_LANG в CL8MSWIN1251, то в консоли тоже нужно установить аналогичную кодовую страницу, а также шрифт Lucida Console (ПКМ на заголовке окна консоли => Свойства => Шрифт), иначе останутся кракозябры.

 

Кодовая страница в текущей терминальной сессии

Получить:

> chcp
Текущая кодовая страница: 866



> chcp

Текущая кодовая страница: 866

Установить:

> chcp <код>



> chcp <код>

, где код может быть:

1251 – Windows (кириллица)

866 – DOC-кодировка

65001 – UTF-8

 

 

Клиентское ПО, например, программа ViewODBC или PL SQL Developer, берет NLS_LANG ТОЛЬКО из переменных окружения, а не из реестра. По крайней мере, не только у меня вышло так.

ПРИМЕЧАНИЕ 2: Не забывайте перезапустить клиентскую программу после установки переменной окружения.

 

Вот тут еще есть интересные эксперименты с вариациями значений параметров CHARACTERSET, NLS_LANG и LANG (на Linux) и других.

 

 



Просмотров:
31 416

Updated:
Categories: АдминистрированиеTags: Oracle, SQL, Кодировка

Как решить проблему чтения csv файлов, выгруженных из PLSQL Developer? — Разработка на vc.ru

Часто в работе мы сталкиваемся с неприятной особенностью выгрузок CSV через инструмент PL SQL Developer – «сохранение в файл csv результата выполнения запроса».

976
просмотров

Для дальнейшего анализа выгруженный файл csv обычно требуется загрузить в pandas.dataframe или в другую СУБД.

При попытке загрузки файла мы сталкиваемся с неприятными ошибками вроде нечитаемых символов, которые pandas не может соотнести с таблицей кодировки: OSError: Initializing from file failed.

Как мы решаем этот вопрос?

Исследуем вопрос, проведем анализ данных csv файла.

Прочитаем несколько срок из файла и выведем результат в консоль:

Код:

if __name__ == ‘__main__’:
with open(r’C:\Users\user\Desktop\editOBScsv\1. csv’, ‘r’, encoding=’utf-8′,
errors=’ignore’) as fo:
c = 0
for row in fo:
print(row)
c += 1
if c == 2:
break

— в данном случае указываем обязательный атрибут errors=’ignore’, который помогает игнорировать символы, не совпадающие с таблицей кодировки.

Вывод:

i?»ID кредита»;»Сумма кредита….
«363092205X474»;»2505600,00

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

if __name__ == ‘__main__’:
with open(r’C:\Users\Desktop\editOBScsv\нулевые графики.csv’, ‘rb’) as fo:
c = 0
for row in fo:
print(row)
c += 1
if c == 1:
break

Вывод:

b’i\xbb?»ID \xd0\xba\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb0″;»\xd0\xa1\xd1\x83\xd0\xbc\xd0\xbc\xd0\xb0 \xd0\xba\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd1\x82\xd0\xb0″;»\

Обратите внимание на первые 2 символа ‘?’ (бинарный вариант i\xbb?). Именно они мешают методу pandas. read_csv корректно прочитать файл в DataFrame, а так же препятствуют загрузки файла в СУБД.

Далее рассмотрим три варианта решения.

Вариант первый

Если файл размера до 1.2 ГБ – файл открывается стандартным блокнотом.

Решение: Открыть файл – удалить первые два символа – сохранить и использовать в pandas/СУБД.

НО! Файлы более 1.2ГБ, блокнот, Notepad ++ — не откроют.

Вариант второй

Установить навороченный текстовый редактор, например – EmEditor работающий с большими текстовыми файлами. Открыть файл – удалить первые два символа – сохранить и использовать в pandas/СУБД.

Вариант третий для знающих Python

Csv – это текстовый файл, последовательность символов. Решение, предложенное ниже использует встроенные библиотеки. Оно заключается в построчном чтении строк, при этом первая строка обрезается с левой стороны на 2 символа следующей конструкцией row = row[2:].

На выходе получаем обработанный файл, сохраненный в указанной директории.

pathRead – указываем путь к файлу, содержащему недопустимые символы,

pathWrite – указываем пусть сохранения обработанного файла

Код:

import time
if __name__ == ‘__main__’:
prTimeStart = time.process_time()
cf = 0

pathRead = r’C:\Users\Desktop\editOBScsv\нулевые графики.csv’
pathWrite = r’C:\Users\Desktop\editOBScsv\out.csv’

with open(pathRead, ‘r’, encoding=’utf-8′, errors=’ignore’) as fo:
with open(pathWrite, ‘w’, encoding=’utf-8′) as fw:
for row in fo:
cf += 1
print(‘Row counts = %d’ % cf)
fo.seek(0)
print(f’Starting to copy and past rows in the new file..’)
cf = 0
for row in fo:
if cf == 0:
print(‘First row before changing:\n%s’ % row)
row = row[2:]
print(‘First row after changing:\n%s’ % row)
cf += 1
fw. writelines(row)
print(‘End copy row in new file.’)
print(‘Time executed copy/past = %f’ % (time.process_time() — prTimeStart))

C:\Anaconda3\python.exe C:/Users/PycharmProjects/editODScsv.py
Row counts = 3696862
Starting to copy and past rows in the new file..
First row before changing:
i?»ID кредита»;»Сумма кредита….
First row after changing:
«ID кредита»;»Сумма кредита…..
End copy row in new file.
Time executed copy/past = 275.781250
Process finished with exit code 0

Обработанный файл можно использовать в pandas/СУБД.

oracle — как заставить разработчика sql правильно отображать неанглийский символ вместо отображения квадратов?

в sql developer — предпочтение

Среда — кодировка уже установлена ​​на «UTF-8»

Редактор кода — для шрифтов установлено значение «Verdana» ‘

Данные в db были записаны Java в кодировке UTF-8 (вероятность 95%)

Что еще мне нужно сделать, чтобы они отображались правильно?

Примечание: символы квадрата на самом деле китайские символы.

  • оракул
  • кодировка
  • utf-8
  • oracle-sqldeveloper
  • не английский

2

Задача решена. Использование шрифта «Microsoft YaHei»

0

sqldeveloper использует системные шрифты с хост-компьютера.
В моей системе Win8 есть шрифт, который имеет глифы для очень многих символов Юникода и, таким образом, работает для многих символов Юникода.

‘Arial Unicode MS’

Выберите этот шрифт в меню Инструменты-Настройки-Редактор кода-Шрифты Unicode MS’, они корректно отображаются в окне редактора и окне вывода, поэтому

 select n'照 عَرَبِيّ ㅌ ㅍ ㅎ 1 ☺ 灯' из двойного; -- если данные NLS_CHARACTERSET являются однобайтовыми (например, 8859, ascii...)
выберите «照 عَرَبِيّ ㅌ ㅍ ㅎ 1 ☺ 灯» из двойного; -- многобайтовый набор символов db.
 

Я проверил много других доступных шрифтов в sqldeveloper, и большинство из них имеют глифы только для ограниченного подмножества символов Юникода, что кажется немного странным. Например, «courier new» в Putty имеет огромное количество глифов, но Win8/sqldeveloper «courier new» не поддерживает арабский, китайский и т. д.

Так что, возможно, следует помнить, что многие шрифты урезаны на подмножества того, что вы могли бы разумно ожидать. Это не ваша вина, это шрифты — почти все они имеют ограниченный набор символов.

Так что используйте «Arial Unicode MS».

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Настройка формата кодировки PL/SQL Developer и китайское искаженное решение


Источник: Интернет

Автор: Пользователь

1, PL/SQL Developer Отображение текстового поля искажено

Причина: Поскольку формат номера базы данных и формат кодировки PL/SQL Developer не унифицированы.

2, PL/SQL Developer Encoding Format Setup подробное решение выглядит следующим образом:
Во-первых, через Select Userenv («язык») из двойного; Запросите кодировку на стороне сервера Oracle, например: American_america. Us7ascii какую кодировку отображать и какой код устанавливать
В нашем клиенте мы должны соответствовать кодировке на стороне сервера.
Итак, на стороне клиента необходимо установить переменную среды: Nls_lang = American_america. Us7ascii может быть.

Приведенная выше кодировка по умолчанию

 GBK выглядит следующим образом:
Создайте переменную системной среды в Windows с именем «NLS_LANG», задайте для нее значение «SIMPLIFIED chinese_china. zhs16gbk», а затем перезапустите разработчик pl/SQL, чтобы извлеченный контент на китайском языке не был зашифрован.
Утф-8 выглядит следующим образом:
Если вы хотите преобразовать кодировку в кодировку UTF8, вы можете назначить «NLS_LANG» для «american_america.utf8», а затем перезапустить разработчика pl/SQL. 

Другие настройки набора символов указаны выше.

Формат Nls_lang
Nls_lang = Language_territory.charset
Существует три компонента (язык, география и набор символов), каждый из которых управляет характеристиками подмножества NLS. Где: язык Определяет язык сообщения сервера. территория определяет формат даты и числа для сервера. CHARSET указывает набор символов.

3. Как настроить набор символов клиента так, чтобы он соответствовал набору символов на стороне сервера:
Чтобы запустить Regedit, первым делом выберите HKEY_LOCAL_MACHINE, вторым шагом выберите программное обеспечение, а третьим шагом выберите Oracle, четвертым шагом выберите Nls_lang и введите тот же набор символов, что и на стороне сервера.