Найти - Пользователи
Полная версия: Использование сторонней программы + проблемы с кодировкой
Начало » Python для новичков » Использование сторонней программы + проблемы с кодировкой
1
aka_gk
Приветствую всех

суть задачи в следующем:
Есть утилита aspell: http://aspell.net/ , она проверяет текст который в нее пихнут на соответствие словарю и в случае наличия неправильных слов выдает их список и варианты замены.

Мне нужно из скрипта на Питоне получить этот самый список неправильных слов, ну и дальше уже с ним что-то делать.

Вот что я делаю:
# -*- coding: utf-8 -*-
import sys
import os

result = os.popen("type C:\\Aspell\\Aspell\\bin\\words.txt | C:\\Aspell\\Aspell\\bin\\aspell.exe -d ru --encoding=utf-8 -a ").read()

print result
Для файла words.txt сохраненного в utf-8 содержащего текст “ошипка мультизодачность”, скрипт выдает вот что:
@(#) International Ispell Version 3.1.20 (but really Aspell 0.50.3)
& ошипка 12 3: ошибка, ошибке, ошибки, ошибку, шпика, ошибок, ошибках, ошибкам, шапка, щипка, охапка, ошибла
& мультизодачность 8 16: мультизадачность, мультизадачности, мультизадачное, мультизадачной, мультизадачном, мультизадачного, мультизадачному, мультимедийность
ну то есть он работает, если присмотреться то можно увидеть два слова которые он посчитал ошибочными.

Как привести всю эту белиберду в нормальный вид?
o7412369815963
в результате русские символы по 2 байта, латиница/цифры по 1 байту. - похоже на utf8
похоже что виндовая консоль символы закарежила.

попробуй вывод в кодировке cp866 (или cp1251), либо сохраняй в файл
aka_gk
да, спасибо, проблема действительно было в виндовой консоли, проблему решил кардинально :)

по ходу появилась другая, обращаюсь через терминал к серверу:
result = os.popen(request).read()
print result
вот что на выходе:
Suggestion: "\320\220\320\273\320\265\320\272\321\201\320\260\320\275\320\264\321\200\320\270\320\271\321\201\320\272\320\276\320\274"
там где \320\220 и далее - слово по-русски, как преобразовать это в “нормальный” русский чтобы можно было дальше с ним работать?

в то же время если написать так:
stringToConvert = "\320\220\320\273\320\265\320\272\321\201\320\260\320\275\320\264\321\200\320\276\320\262\321\201\320\272\320\276\320\274"
print stringToConvert
то вывод происходит корректно, по-русски
pyuser
Попробуйте изменить Ваш код:
result = os.popen(request).read()
print result
на
result = os.popen(request).read()
print result.decode("utf-8")
aka_gk
pyuser
Попробуйте изменить Ваш код:
не помогло, без изменений

upd: в общем решил гетто-методом, создал словарь вида
dict = {"\\320\\220":"А","\\320\\221":"Б","\\320\\222":"В","\\320\\223":"Г","\\320\\224":"Д","\\320\\225":"Е",
"\\320\\201":"Ё","\\320\\226":"Ж","\\320\\227":"З","\\320\\230":"И","\\320\\231":"Й","\\320\\232":"К",
"\\320\\233":"Л","\\320\\234":"М","\\320\\235":"Н","\\320\\236":"О","\\320\\237":"П","\\320\\240":"Р",
"\\320\\241":"С","\\320\\242":"Т","\\320\\243":"У","\\320\\244":"Ф","\\320\\245":"Х","\\320\\246":"Ц",
"\\320\\247":"Ч","\\320\\250":"Ш","\\320\\251":"Щ","\\320\\252":"Ъ","\\320\\253":"Ы","\\320\\254":"Ь",
"\\320\\255":"Э","\\320\\256":"Ю","\\320\\257":"Я","\\320\\260":"а","\\320\\261":"б","\\320\\262":"в",
"\\320\\263":"г","\\320\\264":"д","\\320\\265":"е","\\321\\221":"ё","\\320\\266":"ж","\\320\\267":"з",
"\\320\\270":"и","\\320\\271":"й","\\320\\272":"к","\\320\\273":"л","\\320\\274":"м","\\320\\275":"н",
"\\320\\276":"о","\\320\\277":"п","\\321\\200":"р","\\321\\201":"с","\\321\\202":"т","\\321\\203":"у",
"\\321\\204":"ф","\\321\\205":"х","\\321\\206":"ц","\\321\\207":"ч","\\321\\210":"ш","\\321\\211":"щ",
"\\321\\212":"ъ","\\321\\213":"ы","\\321\\214":"ь","\\321\\215":"э","\\321\\216":"ю","\\321\\217":"я"}
но все таки хотелось бы узнать как сделать по-нормальному
bw
Ну так дальше нельзя, каждый день одно и то же, неужели я единственный знаю про волшебные unicode-escaperaw-unicode-escape).

>>> result.decode('unicode-escape').encode('raw-unicode-escape')

..bw
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