gpt4 book ai didi

python - UTF-16 到 Ascii 忽略十进制值大于 127 的字符

转载 作者:太空宇宙 更新时间:2023-11-04 11:00:02 25 4
gpt4 key购买 nike

我知道这个问题有很多解决方案,但我的解决方案在某种意义上很特殊,我可能会得到截断的 utf16 数据,但必须尽最大努力处理解码和编码将因 UnicodeDecodeError 失败的转换。所以在python中想出了以下代码。请让我知道您对我如何改进它们以加快处理速度的意见。

    try:
# conversion to ascii if utf16 data is formatted correctly
input = open(filename).read().decode('UTF16')
asciiStr = input.encode('ASCII', 'ignore')
open(filename).close()
return asciiStr
except:
# if fail with UnicodeDecodeError, then use brute force
# to decode truncated data
try:
unicode = open(filename).read()
if (ord(unicode[0]) == 255 and ord(unicode[1]) == 254):
print("Little-Endian format, UTF-16")
leAscii = "".join([(unicode[i]) for i in range(2, len(unicode), 2) if 0 < ord(unicode[i]) < 127])
open(filename).close()
return leAscii
elif (ord(unicode[0]) == 254 and ord(unicode[1]) == 255):
print("Big-Endian format, UTF-16")
beAscii = "".join([(unicode[i]) for i in range(3, len(unicode), 2) if 0 < ord(unicode[i]) < 127])
open(filename).close()
return beAscii
else:
open(filename).close()
return None
except:
open(filename).close()
print("Error in converting to ASCII")
return None

最佳答案

关于:

data = open(filename).read()
try:
data = data.decode("utf-16")
except UnicodeDecodeError:
data = data[:-1].decode("utf-16")

即如果它在代码单元的中途被截断,则剪掉最后一个字节,然后再做一次。这应该让您回到有效的 UTF-16 字符串,而不必尝试自己实现解码器。

关于python - UTF-16 到 Ascii 忽略十进制值大于 127 的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361775/

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