Задать вопрос
HartX
@HartX
Студент, красавчик, плохой программист=)

Как поменять кодировку файла в python на UNF-8-BOM без \ufeff?

Пишу скрипт, который автоматически переведёт игру. Вся локализация игры лежит в файле с кодировкой utf-8-bom. Я перевожу и записываю перевод в файл, который тоже должен быть utf-8-bom, но python настойчиво делает из него обычный utf-8, чтобы перевести его в bom я создал такую функцию:
def encod_utf8_bom(self, path_on_file: str):
        file = open(path_on_file, encoding='utf-8', mode='r')
        encoding_file = [line.encode('utf-8-sig') for line in file]
        file.close()
        file = open(path_on_file, 'wb')
        [file.write(line) for line in encoding_file]
        file.close()

Но она ставит \ufeff впереди (отображается как точка впереди)60f4a3c802081200335687.jpeg
И в итоге перевод не работает. Однако если я сделаю перевод на utf-8 и через Notepad ++ сменю кодировку на utf-8-bom перевод заработает (и отображается без точек). Как мне сделать так же но в python?
  • Вопрос задан
  • 822 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@javedimka
Хочу сока
\ufeff

Это и есть bom.

Кодировать нужно не каждую строчку, а данные целиком. Открыл бы хоть, википедию, для приличия то, чтобы понимать с чем работаешь:
Согласно спецификации Юникода, маркер может стоять только в самом начале файла или потока.


import shutil

def encode_utf8_bom(self, path_on_file: str):
    with open(path_on_file, encoding="utf-8") as f_in, open(path_on_file+".tmp", encoding="utf-8-sig", mode="w") as f_out:
        f_out.write(f_in.read())
        shutil.move(path_on_file + ".tmp", path_on_file)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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