Azure Function Python 字符串编码异常问题求助
解决Python Azure Function中的Unicode编码输出问题
问题根源
Azure Functions的Python运行时(Windows环境)默认将标准输出/错误流的编码设为cp1252,该编码不支持Δ(\u0394)这类Unicode字符,因此执行print时会触发UnicodeEncodeError;使用logging模块时,默认编码不匹配,导致字符被替换成问号。
解决方案
1. 强制修改标准输出/错误流为UTF-8编码
在函数代码开头添加以下代码,重定向stdout和stderr的编码:
import sys import codecs # 强制设置标准输出、错误流为UTF-8编码 sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) sys.stderr = codecs.getwriter("utf-8")(sys.stderr.detach())
之后执行print(a)就能正常输出Δ字符。
2. 配置logging模块使用UTF-8编码
若用logging记录日志,需手动配置日志处理器的编码:
import logging import sys # 重置根日志器配置 logger = logging.getLogger() logger.setLevel(logging.INFO) for handler in logger.handlers[:]: logger.removeHandler(handler) # 创建UTF-8编码的日志处理器 handler = logging.StreamHandler(sys.stdout) handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) handler.encoding = 'utf-8' logger.addHandler(handler) # 测试日志输出 logger.info(a) # 此时会正常显示Δ
3. 替代方案:直接返回结果给调用者
如果只是需要将字符返回给请求方,无需输出到控制台,直接在函数返回值中返回即可:
import azure.functions as func def main(req: func.HttpRequest) -> func.HttpResponse: test = b'\xce\x94' a = test.decode('utf-8') return func.HttpResponse(a, charset='utf-8')
前端调用时就能正确获取到Δ字符。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

