Если вы недавно перешли на операционную систему Линукс наверняка захватите с собой все файлы сохраненные под Windows в кодировке CP-1251. Чье содержимое при просмотре стандартными программами под Линукс привидет к искожению содержимого. Так например станартный редактор текста gedit показывается содержимое виндус файлов в кодировке ISO-8859-15, что не позволяет читать его содержимое. Так же вы можете попробовать вывести файл в терминал или, напирмер посмотреть фильм с русскими субтитрами программой VLC Player. Во всех этих случаях вы получаете искаженный вывод.
Одно из возможных решений - перевести файлы в формат UTF-8.
Для этой цели я набросал небольшой плагин для текстового редактора gedit. В настоящий момент он поддерживает переобразование из кодировки CP-1251 в UTF-8. Но без труда может быть доработан до включения всех поддерживаемых расскладок.
~/.gnome2/gedit/plugins/encodingconverter.gedit-plugin
[Gedit Plugin] Loader=python Module=encodingconverter IAge=2 Name=Encoding Converter Description=Converts open files to other encoding Authors=Alexey Kuznetsov Copyright=Copyright © 2009 Alexey Kuznetsov <ak@axet.ru> Website=http://axet.ru
~/.gnome2/gedit/plugins/encodingconverter.py
'''
thx to http://live.gnome.org/Gedit/PythonPluginHowTo
Copyright (C) 2009 Alexey Kuznetsov <ak@axet.ru>
version 1.0.0
'''
import gedit
import gtk
import codecs
import os
import sys
from os.path import join, getsize
class EncodingConverterPluginHelper:
submenu = """<ui>
<menubar name='MenuBar'>
<menu name='ToolsMenu' action='Tools'>
<menuitem action='fromCP1251'/>
</menu>
</menubar>
</ui>"""
def __init__(self, plugin, window):
self.window = window
self.plugin = plugin
doc = self.window.get_active_document()
actions = (
("fromCP1251", None, "Convert text from CP1251", None, "Convert text from CP1251", self.fromCP1251),
)
self.action_group = gtk.ActionGroup("GeditToUTF8EncodingConverterPluginActions")
self.action_group.add_actions(actions, window)
manager = window.get_ui_manager()
manager.insert_action_group(self.action_group, -1)
self.ui_id = manager.add_ui_from_string(self.submenu)
def __del__(self):
manager = self.window.get_ui_manager()
manager.remove_ui(self.ui_id)
manager.remove_action_group(self.action_group)
manager.ensure_update()
def update_ui(self):
doc = self.window.get_active_document()
self.action_group.set_sensitive(bool(doc and not doc.get_readonly()))
def fromCP1251(self, widget, window):
doc = window.get_active_document()
start, end = doc.get_bounds()
text = doc.get_text(start, end)
currentencoder = codecs.lookup(doc.get_encoding().get_charset())[0]
utf8decoder = codecs.lookup('utf-8')[1]
windecoder = codecs.lookup('windows-1251')[1]
utf8encoder = codecs.lookup('utf-8')[0]
text = utf8decoder(text)[0]
text = currentencoder(text)[0]
text = windecoder(text)[0]
text = utf8encoder(text)[0];
doc.begin_user_action()
it = doc.get_iter_at_mark(doc.get_insert())
line = it.get_line()
doc.delete(start, end)
doc.insert(start, text)
doc.end_user_action()
class EncodingConverterPlugin(gedit.Plugin):
def __init__(self):
gedit.Plugin.__init__(self)
self._instances = {}
def activate(self, window):
self._instances[window] = EncodingConverterPluginHelper(self, window)
def deactivate(self, window):
del self._instances[window]
def update_ui(self, window):
self._instances[window].update_ui()
Домашняя страница проекта:


2 коммент.: