运行 python3 通过 apache wsgi 编码时显示 ascii 编解码器错误

ascii codec error is showing while running python3 code via apche wsgi

Objective: 将日语文本插入 .ini 文件

步骤:

  1. Python版本使用3.6,使用Flask框架
  2. 用于编写配置文件的库是Configparser

问题:

当我通过 "flask run" 命令尝试 运行 代码时,没有任何问题。日语文本已正确插入到 ini 文件中 但是当我通过 apache(wsgi) 尝试 运行 相同的代码时,我收到以下错误 'ascii' 编解码器无法对位置 17-23 中的字符进行编码:序号不在范围内 (128)

切勿在未明确指定编码的情况下与文本文件交互。

可悲的是,甚至 Python 的 official documentation 也忽略了遵守这个简单的规则。

import configparser

config_path = 'your_file.ini'
config = configparser.ConfigParser()

with open(config_path, encoding='utf8') as fp:
    config.read_file(fp)


with open(config_path, 'w', encoding='utf8') as fp:
    config.write(fp)

utf8 是存储 Unicode 字符的合理选择,如果您有偏好,请选择不同的编码。

日语字符在 UTF-8 中每个字符最多占用五个字节,选择 utf16(每个字符始终两个字节)可以生成更小的 ini 文件,但没有功能差异。