0

我遇到了我认为是一些奇怪的编码错误,但这真的让我感到困惑。基本上我正在尝试将 unicode 字符串作为图像写入文件,并且字符串表示形式打印得很好。

ìԉcïԁiԁúлt cúɭpâ ρáncéttá, ëɑ ëɭìt haϻ offícìà còлѕêɋûät. Sunt ԁësërúлt

但是我尝试将字符串写入任何相关位置的任何方式都会出现标准 ascii 编码错误:

UnicodeEncodeError: 'ascii' codec can't encode characters 0-3: ordinal not in range 128

我尝试设置源文件的编码,并确保我的系统变量未设置为 ascii,并且我尝试通过以下方式直接输出到文件:

python script.py > output.jpg

而且似乎都没有任何效果。无法解决一个简单的编码问题,我觉得有点傻,但我真的不知道ascii编解码器是从哪里来的。

相关代码:

def random_image(**kwargs):
    image_array = numpy.random.rand(kwargs["dims"][0], kwargs["dims"][1], 3)*255
    image = Image.fromarray(image_array.astype('uint8')).convert('RGBA')
    format = kwargs.get("format", "JPEG")
    output = StringIO.StringIO()
    image.save(output, format=format)
    content = output.getvalue()
    output.close()
    content = [str(ord(char)) for char in content]
    return content
4

1 回答 1

1

第一个问题是为什么你要以 Unicode 字符串的形式存储图像的内容?图像通常包含任意八位位组,应该用str(bytes在 Python 3 中) 表示,而不是unicode类型。

当您将 Unicode 字符串打印到屏幕上时,将根据环境设置选择编码。打印到文件时,需要指定编码,否则ascii假定。要让您的程序默认为文件更健全,请使用以下命令开始:

encoding = sys.stdout.encoding or 'utf-8'
sys.stdout = codecs.getwriter(encoding)(sys.stdout, errors='replace')
于 2013-07-09T14:12:59.457 回答