Задать вопрос
@toarugakusei

Как правильно перекодировать текстовый файл utf-8 в Windows-1251?

Доброго времени суток
Мне нужно перекодировать этот файл
в Windows-1251
Пытался это сделать с помощью встроенный функции sublime но получал ошибку 6085c9d4c19a4025116065.png
После нашел код на python для перекодировки
# -*- coding: utf-8 -*-

# UTF8 to cp1251 and ShiftJIS recoder
# by Chtobi and Nazon, 2016

import codecs
import argparse
from os import path

JAPANESE_CODEPAGE = 'shift_jis'

UTF_CODEPAGE = 'utf-8'
RUS_CODEPAGE = 'cp1251'


def nonrus_handler(e):

    if e.object[e.start:e.end] == '~':  # UTF-8: 0xEFBD9E -> SHIFT-JIS: 0x8160
        japstr_byte = b'\x81\x60'

    elif e.object[e.start:e.end] == '-':  # UTF-8: 0xEFBC8D -> SHIFT-JIS: 0x817C
        japstr_byte = b'\x81\x7c'

    else:
        japstr_byte = (e.object[e.start:e.end]).encode(JAPANESE_CODEPAGE)

    return japstr_byte, e.end


if __name__ == '__main__':

    arg_parser = argparse.ArgumentParser(prog="Recode to cp1251 and ShiftJIS",
                                         description="Program to encode UTF8 text file to "
                                         "cp1251 for all cyrillic symbols and ShiftJIS for others. "
                                         "Output file will be inputfilename.s",
                                         usage="recode_to_cp1251_shiftjis.py file_name")
    arg_parser.add_argument('file_name', nargs=1, type=argparse.FileType(mode='r', bufsize=-1),
                            help="Input text file name. Only files coded in UTF8 are allowed.\n")

    codecs.register_error('nonrus_handler', nonrus_handler)

    input_name = arg_parser.parse_args().file_name[0].name

    output_name = path.splitext(input_name)[0] + ".s"

    with open(input_name, 'rt', encoding = UTF_CODEPAGE) as input_file:
        with open(output_name, 'wb') as output_file:
            if input_name.find(u'\xa0') >= 0:
                input_name = input_name.replace(u'\xa0', u' ') 
            elif input_name.find(u'\ufeff') >= 0:
                input_name = input_name.replace(u'\ufeff', u'')   
            for line in input_file:
                for char1 in line:
                    bytes_out = bytes(line, UTF_CODEPAGE)

                    output_file.write(char1.encode(RUS_CODEPAGE, "nonrus_handler"))
                    
        print("Done.")

Он перекодировал файл правда все русские символы превратились в непонятно что
Âðåìÿ òÿíåòñÿ áåñêîíå÷íî äîëãî.@
` Íî â ðåàëüíîì ìèðå íå ðàçäàëîñü è òûñÿ÷íîãî òèêàíüÿ ÷àñîâ.@
` Àðêâåéä ïîäíèìàåò ãîëîâó, è ñìîòðèò íà ìåíÿ òàê, ñëîâíî âèäèò ñîí.\


` – Øèêè, òû âñ¸ íå óõîäèë äîìîé.@ È ÿ ïðèøëà ñþäà, ïîòîìó ÷òî íå ìîãëà îñòàâèòü òåáÿ îäíîãî...@ Õîòü ÿ è ñîáèðàëàñü âîçâðàùàòüñÿ ê ñåáå.@
` Îíà íåìíîãî çàïèíàåòñÿ, íî ãîâîðèò â ñâîåé îáû÷íîé æèçíåðàäîñòíîé ìàíåðå.\

` – Êîíå÷íî ÿ íå óõîäèë.@ Ðàçâå ÿ íå ãîâîðèë ÷òî áóäó äåðæàòü ñâî¸ îáåùàíèå?@ ß âñ¸ åù¸ íèêàê íå ïîìîã òåáå ñåãîäíÿ.@
` – Õâàòèò óæå...@ Òåáå áîëüøå íå íóæíî ýòîãî äåëàòü.@
` – Õâàòèò?.. ×åãî õâàòèò, Àðêâåéä?!..\

` – Ðàçâå íå ÿñíî?@ Ïðîñòî òû ÷åëîâåê, Øèêè, à ÿ âàìïèð.@
` Ó ìåíÿ íå áûëî ïðàâà ïðîñèòü òåáÿ î ïîìîùè.@ ß íå ïîíèìàëà ýòîãî ðàíüøå, è ÿ áû ðàçðóøèëà òåáÿ, åñëè áû çàøëà íåìíîãî äàëüøå.@
` Ïîýòîìó...@
` «...äîñòàòî÷íî», øåï÷åò îíà.\

6085ccca5c06a365394131.png

Есть ли способ вернуть русским смволам их изнчалный вид ? или же есть метод который не будить шакалить символы ?
Зарание Спасибо за ответ
  • Вопрос задан
  • 1691 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Время тянется бесконечно долго

Это 1251 отображенный как 1252. Т.е. ваша программа, читающая и отображающая текст, полагает, что это 1252 кодировка. Наверно, ей надо где-то подсказать в настройках, что она ошибается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы