Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
103 / 93 / 14
Регистрация: 20.06.2010
Сообщений: 963
Записей в блоге: 16
1

Boost и Python 3: установить кодировку koi8-r

28.11.2015, 11:34. Просмотров 1655. Ответов 22
Метки нет (Все метки)


Есть проект на C++ в котором используется boost. Пытаюсь подключить к нему третий питон. В самом проекте кодировка koi8-r. Грубо говоря, делаю что-то типа такого:
1) Подключаю бустовский питон
2) Импортирую script.py и вызываю из него функцию reg(command)
reg - это обернутая для питона, функция c++, которая помещает command в object call
command - питоновская функция
Python
1
2
def command(text):
   print(text)
3) Дальше из плюсов я делаю что-то типа call("тест")
4) Питон сыпется с ошибкой UnicodeDecodeError
В системе (ubuntu) кодировка по умолчанию koi8-r, в script.py указана кодировка koi8-r, аргумент "тест" - в koi8-r
Единственный вариант, как это исправить - перекодировать "тест" в utf8, а потом делать cal(). Нельзя ли как-то еще задать кодировку для питона, когда из плюсов делаем вызов питоновского объекта ? Если в command(text) добавить print(locale.getpreferredencoding(), sys.stdout.encoding), то он выводит koi8-r kou8-r.

Добавлено через 47 минут
Вот тут есть решение , но я его оставлю на крайний случай, очень уж не хочется менять сорцы буста и питона.

Добавлено через 15 часов 21 минуту
Выслушаю любые идеи.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2015, 11:34
Ответы с готовыми решениями:

а как установить boost?
а как установить boost? Добавлено через 1 час 18 минут У кого-то есть уже скомпилированый файл?...

Установить Boost на Visual Studio
Ребят, помогите в нелегком деле: как прикрутить библиотеку boost к компилятору Visual Studio...

Как установить Boost на среду Eclipse Mars?
Как установить Boost на среду Eclipse Mars?

Нужно изменить кодировку письма на Cyrillic KOI8-R
Вот скрипт отправки письма. Письмо приходит в кодировке Cyrillic Windows-1251. Нужно изменить его...

22
Avazart
29.11.2015, 22:48
  #2

Не по теме:

Цитата Сообщение от bodrich Посмотреть сообщение
В системе (ubuntu) кодировка по умолчанию koi8-r,
Вопрос какой криворукий ее туда поставил?

0
1396 / 1253 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
29.11.2015, 23:37 3
Цитата Сообщение от Avazart Посмотреть сообщение
Вопрос какой криворукий ее туда поставил?
В линуксе можно любую кодировку выбрать.
0
Avazart
29.11.2015, 23:54
  #4

Не по теме:

Цитата Сообщение от RazrFalcon Посмотреть сообщение
В линуксе можно любую кодировку выбрать.
И чет вы хотели этим сказать?

0
1396 / 1253 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
30.11.2015, 00:03 5
Цитата Сообщение от Avazart Посмотреть сообщение
И чет вы хотели этим сказать?
Как минимум то, что в лине ограничений на системную кодировку, и если кто-то ее туда поставил - значит на то есть причины.
0
Avazart
30.11.2015, 00:17
  #6

Не по теме:

Цитата Сообщение от RazrFalcon Посмотреть сообщение
значит на то есть причины.
Две кривые, не от туда растущие причины? Это же вообще устаревшая кодировка для почтовых сообщений.

0
103 / 93 / 14
Регистрация: 20.06.2010
Сообщений: 963
Записей в блоге: 16
01.12.2015, 19:27  [ТС] 7
Цитата Сообщение от Avazart Посмотреть сообщение
Вопрос какой криворукий ее туда поставил?
Системная, конечно же, utf8. KOI8-R стоит для пользователя, под которым все запускается.
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,391
Записей в блоге: 29
01.12.2015, 19:31 8
Т.е над пользователем решили поиздеваться?

 Комментарий модератора 
Хватит оффтопить. Или отвечайте на вопрос тс, или положите рядом с компьютером бумажку, на которую и записывайте свои риторические вопросы.
0
1396 / 1253 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
01.12.2015, 23:30 9
bodrich, разве у юзера не системная кодировка?
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,391
Записей в блоге: 29
02.12.2015, 11:44 10
Цитата Сообщение от Avazart Посмотреть сообщение
Или отвечайте на вопрос тс
Цитата Сообщение от Avazart Посмотреть сообщение
на которую и записывайте свои риторические вопросы.
Почему же риторически, мне интересно из каких соображений выбрана KOI8-R? От сюда и будем исходить при ответе не вопрос.
0
103 / 93 / 14
Регистрация: 20.06.2010
Сообщений: 963
Записей в блоге: 16
02.12.2015, 13:21  [ТС] 11
Цитата Сообщение от RazrFalcon Посмотреть сообщение
bodrich, разве у юзера не системная кодировка?
Нет, в линуксе юзеру можно отдельно кодировку задавать.
Цитата Сообщение от Avazart Посмотреть сообщение
Почему же риторически, мне интересно из каких соображений выбрана KOI8-R? От сюда и будем исходить при ответе не вопрос.
Потому что проект, для которого собственно и используется vps, юзает koi8-r в силу исторических обстоятельств. Некоторым кускам коду уже лет 25.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
/* ************************************************************************
*   File: comm.cpp                                      Part of Bylins    *
*  Usage: Communication, socket handling, main(), central game loop       *
*                                                                         *
*  All rights reserved.  See license.doc for complete information.        *
*                                                                         *
*  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
*  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
*                                                                         *
*  $Author$                                                        *
*  $Date$                                           *
*  $Revision$                                                       *
************************************************************************ */
0
tezaurismosis
03.12.2015, 10:49
  #12
 Комментарий модератора 
Avazart, перечитайте пункты правил 3.1 и 6.5.
У кого тут по вашему мнению прямые руки, а у кого кривые, обсуждаться не будет.
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,391
Записей в блоге: 29
03.12.2015, 11:30 13
Цитата Сообщение от bodrich Посмотреть сообщение
Потому что проект, для которого собственно и используется vps, юзает koi8-r в силу исторических обстоятельств. Некоторым кускам коду уже лет 25.
И таких кусков настолько много что бы взять и перевести все в UTF-8 ?
Как по мне правильно было сделать именно это и не иметь проблем в дальнейшем и не делать отчаянные попытки реализовать все через труднодоступные места.
0
103 / 93 / 14
Регистрация: 20.06.2010
Сообщений: 963
Записей в блоге: 16
03.12.2015, 12:59  [ТС] 14
Цитата Сообщение от Avazart Посмотреть сообщение
И таких кусков настолько много что бы взять и перевести все в UTF-8 ?
Игра то текстовая, там практически все связано с обработкой строк и символов. Так что дофига.
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,391
Записей в блоге: 29
03.12.2015, 13:03 15
Ну так что мешает написать на питоне скрипт для автоматизированного конвертирования/перекодирования файлов?
0
103 / 93 / 14
Регистрация: 20.06.2010
Сообщений: 963
Записей в блоге: 16
03.12.2015, 15:09  [ТС] 16
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так что мешает написать на питоне скрипт для автоматизированного конвертирования/перекодирования файлов?
Я не думаю, что смогу что-то такое написать, нужно ведь какой-то анализатор выражений писать. Грубо говоря, если где-то в коде мы из char копировали n символов, то теперь нужно будет копировать n*2 символов. Может есть какие-то готовые варианты ?
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,391
Записей в блоге: 29
03.12.2015, 15:11 17
Какой еще анализатор?
Цитата Сообщение от bodrich Посмотреть сообщение
будет копировать n*2 символов
Почему это?
0
103 / 93 / 14
Регистрация: 20.06.2010
Сообщений: 963
Записей в блоге: 16
03.12.2015, 15:20  [ТС] 18
Мне кажется, что я тупой Смотрите:
Делаем built-in модуль для питона как-то так:
C++
1
2
3
4
5
BOOST_PYTHON_MODULE(mud)
{
def("find_skill_num", find_skill_num, "Возвращает номер скила по его названию.");
...
}
Дальше, в коде, где подключается питон (напоминаю, третья версия)
C++
1
2
3
4
Py_InitializeEx(0);
PyEval_InitThreads();
PyInit_mud();
import("mud");
И теперь это не работает. Не находит библиотеку mud, хотя раньше она импортировалась нормально. Если делать так:
C++
1
PyImport_AppendInittab ("mud", PyInit_mud );
То теперь при подключении библиотеки появляется такая ошибка:
Кликните здесь для просмотра всего текста
Dec 3 14:25:20 :: Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 2237, in _find_and_load

File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked

File "<frozen importlib._bootstrap>", line 1191, in _load_unlocked

File "<frozen importlib._bootstrap>", line 1161, in _load_backward_compatible

File "<frozen importlib._bootstrap>", line 550, in _requires_builtin_wrapper

File "<frozen importlib._bootstrap>", line 1294, in load_module

File "<frozen importlib._bootstrap>", line 148, in __exit__

File "<frozen importlib._bootstrap>", line 148, in <genexpr>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xef in position 0: invalid continuation byte

Сразу на первом символе умирает

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Почему это?
Может быть потому-что кодировка utf8 занимает в памяти два байта для кириллицы, разве нет ?
0
Эксперт С++
8354 / 6092 / 610
Регистрация: 10.12.2010
Сообщений: 28,391
Записей в блоге: 29
03.12.2015, 17:04 19
Цитата Сообщение от bodrich Посмотреть сообщение
Может быть потому-что кодировка utf8 занимает в памяти два байта для кириллицы, разве нет ?
А какая разница, мы ведь работаем с символами, а не сырыми байтами?
0
103 / 93 / 14
Регистрация: 20.06.2010
Сообщений: 963
Записей в блоге: 16
03.12.2015, 17:15  [ТС] 20
Цитата Сообщение от Avazart Посмотреть сообщение
А какая разница, мы ведь работаем с символами, а не сырыми байтами?
А с каких пор c++ умеет по дефолту работать с utf8, как с символами ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2015, 17:15

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Установить кодировку по умолчанию
Помогите с проблемой, делал раньше, теперь этого проекта нет и я в непонятках. Требуется записать в...

Установить кодировку созданной таблицы
Как можно установить кодировку таблицы в utf8,вот текущий запрос CREATE TABLE `lol` ( `id`...

Как установить кодировку сервера в utf-8?
Люди, Помогите, пожалуйста установить кодировку сервера под utf-8

Установить кодировку создаваемого txt файла в ANSI
Доброго времени суток! Есть код, который парсит определенную страницу в инете а после создает файл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.