Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 9, 2013 11:02:40

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Ммм. А в чем же может быть проблема? ОС?

Офлайн

#2 Дек. 9, 2013 11:23:23

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Под linux тоже никак.

Прикреплённый файлы:
attachment scr.jpg (146,2 KБ)

Офлайн

#3 Дек. 9, 2013 11:43:57

TroSer
От: Харьков
Зарегистрирован: 2013-11-13
Сообщения: 65
Репутация: +  3  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

при чтении файла с помощью readline() добавляются дополнительные бэкслеш, поэтому s выглядит как

>>> s
'\\\\u0410\\\\u043b\\\\u0435\\\\u043a\\\\u0441\\\\u0430\\\\u043d\\\\u0434\\\\u0440'

для решения попробуйте

f = open('example.txt', 'r')
s = f.readline()
s = s.replace('\\\\', '\\')
print s.decode('unicode-escape')

Офлайн

#4 Дек. 9, 2013 11:59:07

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Под линукс помогло, правда выдал не все символы, некоторые заменил ромбами.
Под виндой ошибка:

>>> print s.decode('unicode-escape')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode characters in position 6-18: character maps to <undefined>

Офлайн

#5 Дек. 9, 2013 12:12:26

TroSer
От: Харьков
Зарегистрирован: 2013-11-13
Сообщения: 65
Репутация: +  3  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

пробую под виндой, вроде работает, я так понимаю, там еще есть дополнительный код и задача не просто прочитать и декодировать?

import codecs
out = codecs.open('example.txt', 'r', 'unicode-escape')
s = out.read()
print s.decode('unicode-escape')

может кто-то более опытный подскажет лучше

Отредактировано TroSer (Дек. 9, 2013 12:17:45)

Офлайн

#6 Дек. 9, 2013 13:28:35

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

TroSer

Задача одна: прочитать один файл и записать в другой файл. Без какой-либо доп. обработки. Просто файл реально большой.

Если кто-нибудь знает готовые утилиты, то сгодятся и они. Вот здесь: http://www.mixesoft.com/unicode_escaped_sequence_to_string_literals_converter.html есть декодер, который справляется с задачей. Но свой файл я туда загрузить не смогу.

Да и вообще, хотелось бы понять, в чем проблема.

Даже когда беру один символ, декодировать не получается:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-8: character maps to <undefined>
>>> s='\u0410'
>>> print s.decode('unicode-escape')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0410' in position 0: character maps to <undefined>
Хотя это явно буква А..

Отредактировано maxfox (Дек. 9, 2013 13:34:27)

Офлайн

#7 Дек. 9, 2013 17:32:00

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

Я так понимаю, что вот такое поведение не нормально:

>>> import sys
>>> print sys.getdefaultencoding()
ascii
>>> s=u'\u0410'
>>> print s
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\cp437.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0410' in position 0: character maps to <undefined>
>>>
Проблема с настройками ОС или Python?

Офлайн

#8 Дек. 9, 2013 18:01:17

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

а

sys.stdin.encoding
sys.stdout.encoding
что показывают?

Офлайн

#9 Дек. 9, 2013 18:07:32

maxfox
Зарегистрирован: 2013-07-27
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

bismigalis
stdin cp1252
stdout cp437

Я так понимаю, это отображение системных потоков, с которыми работает интерпретатор? Т.е. все дело в окружении?

Отредактировано maxfox (Дек. 9, 2013 18:11:45)

Офлайн

#10 Дек. 9, 2013 18:13:21

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Как декодировать строку? (HElp please)

cp437 не может содержать русские буквы

maxfox
stdin cp1252
stdout cp437
это в виндовом cmd?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version