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 и введите тот же набор символов, что и на стороне сервера.