gpt4 book ai didi

php - 批量将未知文件编码转换为 UTF-8

转载 作者:太空狗 更新时间:2023-10-29 11:24:19 26 4
gpt4 key购买 nike

我需要将一些文件转换为 UTF-8,因为它们是在其他 UTF-8 站点中输出的,而且内容有时看起来有点乱。

我可以现在执行此操作,也可以在读入它们时执行此操作(通过 PHP,仅使用 fopen,没什么特别的)。欢迎提出任何建议。

最佳答案

对于 PHP 我没有明确的解决方案,但是对于 Python 我个人使用了 Universal Encoding Detector library它在猜测文件被写入的编码方面做得很好。

只是为了让你开始,这里有一个我用来做转换的 Python 脚本(最初的目的是我想从 UTF-16 和 Shift-JIS 的混合体转换一个日语代码库,我做了如果 chardet 对检测编码没有信心,则默认猜测):

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

""" Detects encoding

Returns chardet result"""
def DetectEncoding(fileHdl):
detector = UniversalDetector()
for line in fileHdl:
detector.feed(line)
if detector.done: break
detector.close()
return detector.result


""" Reencode file to UTF-8
"""
def ReencodeFileToUtf8(fileName, encoding):
#TODO: This is dangerous ^^||, would need a backup option :)
#NOTE: Use 'replace' option which tolerates errorneous characters
data = codecs.open(fileName, 'rb', encoding, 'replace').read()
open(fileName, 'wb').write(data.encode('utf-8', 'replace'))

""" Main function
"""
if __name__=='__main__':
# Check for arguments first
if len(sys.argv) <> 2:
sys.exit("Invalid arguments supplied")

fileName = sys.argv[1]
try:
# Open file and detect encoding
fileHdl = open(fileName, 'rb')
encResult = DetectEncoding(fileHdl)
fileHdl.close()

# Was it an empty file?
if encResult['confidence'] == 0 and encResult['encoding'] == None:
sys.exit("Possible empty file")

# Only attempt to reencode file if we are confident about the
# encoding and if it's not UTF-8
encoding = encResult['encoding'].lower()
if encResult['confidence'] >= 0.7:
if encoding != 'utf-8':
ReencodeFileToUtf8(fileName, encoding)
else:
# TODO: Probably you could make a default guess and try to encode, or
# just simply make it fail

except IOError:
sys.exit('An IOError occured')

关于php - 批量将未知文件编码转换为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com