Как преобразовать файл в utf-8 в Python?

Рецепты Laravel предлагают простой, но эффективный способ сделать это, не включая теги php

{{--*/ $var = 'test' /*--}}

{{- -}} работает как комментарий к лезвию / и / возвращает эффект комментария в результате

<?php $var = 'test' ?>

Проблема в том, что она длиннее, чем теги php: - (

53
задан DzinX 10 October 2008 в 23:57
поделиться

3 ответа

Можно использовать эти модуль кодеков , как это:

import codecs
BLOCKSIZE = 1048576 # or some other, desired size in bytes
with codecs.open(sourceFileName, "r", "your-source-encoding") as sourceFile:
    with codecs.open(targetFileName, "w", "utf-8") as targetFile:
        while True:
            contents = sourceFile.read(BLOCKSIZE)
            if not contents:
                break
            targetFile.write(contents)

РЕДАКТИРОВАНИЕ : добавленный BLOCKSIZE параметр для управления файлом разделяют размер на блоки.

47
ответ дан K DawG 7 November 2019 в 18:42
поделиться

Это работало на меня в маленьком тесте:

sourceEncoding = "iso-8859-1"
targetEncoding = "utf-8"
source = open("source")
target = open("target", "w")

target.write(unicode(source.read(), sourceEncoding).encode(targetEncoding))
28
ответ дан Staale 7 November 2019 в 18:42
поделиться

Спасибо за ответы это работает!

И так как исходные файлы находятся в смешанных форматах, я добавил список исходных форматов, которые попробуют в последовательности (sourceFormats), и на UnicodeDecodeError я пробую следующий формат:

from __future__ import with_statement

import os
import sys
import codecs
from chardet.universaldetector import UniversalDetector

targetFormat = 'utf-8'
outputDir = 'converted'
detector = UniversalDetector()

def get_encoding_type(current_file):
    detector.reset()
    for line in file(current_file):
        detector.feed(line)
        if detector.done: break
    detector.close()
    return detector.result['encoding']

def convertFileBestGuess(filename):
   sourceFormats = ['ascii', 'iso-8859-1']
   for format in sourceFormats:
     try:
        with codecs.open(fileName, 'rU', format) as sourceFile:
            writeConversion(sourceFile)
            print('Done.')
            return
      except UnicodeDecodeError:
        pass

def convertFileWithDetection(fileName):
    print("Converting '" + fileName + "'...")
    format=get_encoding_type(fileName)
    try:
        with codecs.open(fileName, 'rU', format) as sourceFile:
            writeConversion(sourceFile)
            print('Done.')
            return
    except UnicodeDecodeError:
        pass

    print("Error: failed to convert '" + fileName + "'.")


def writeConversion(file):
    with codecs.open(outputDir + '/' + fileName, 'w', targetFormat) as targetFile:
        for line in file:
            targetFile.write(line)

# Off topic: get the file list and call convertFile on each file
# ...

(РЕДАКТИРУЮТ Rudro Badhon: это включает исходную попытку несколько форматов, пока Вы не получаете исключение, а также альтернативный подход, который использует chardet.universaldetector)

13
ответ дан Foon 7 November 2019 в 18:42
поделиться
Другие вопросы по тегам:

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