Найти - Пользователи
Полная версия: Как декодировать строку? (HElp please)
Начало » Python для новичков » Как декодировать строку? (HElp please)
1 2 3
maxfox
Ммм. А в чем же может быть проблема? ОС?
maxfox
Под linux тоже никак.
TroSer
при чтении файла с помощью 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')
maxfox
Под линукс помогло, правда выдал не все символы, некоторые заменил ромбами.
Под виндой ошибка:
>>> 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>
TroSer
пробую под виндой, вроде работает, я так понимаю, там еще есть дополнительный код и задача не просто прочитать и декодировать?
import codecs
out = codecs.open('example.txt', 'r', 'unicode-escape')
s = out.read()
print s.decode('unicode-escape')

может кто-то более опытный подскажет лучше
maxfox
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
Я так понимаю, что вот такое поведение не нормально:
>>> 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?
bismigalis
а
sys.stdin.encoding
sys.stdout.encoding
что показывают?
maxfox
bismigalis
stdin cp1252
stdout cp437

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

maxfox
stdin cp1252
stdout cp437
это в виндовом cmd?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB