当前位置: 首页 > 面试题库 >

Docker Python设置utf-8语言环境

施自明
2023-03-14
问题内容

我正在尝试运行我的python文件,该文件首先读取中文字符串并打印。

这是我的Dockerfile

FROM python:2.7-onbuild
ENV LANG en_US.UTF-8
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

这是我的python文件:

    # -*- coding: utf-8 -*-
    import jieba
    s = "我来到北京清华大学"
    s = s.decode('utf-8')
    print type(s), s

然后我运行:

docker build -t python-example .

docker run python-example

我得到的错误: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-8: ordinal not in range(128)

当我在本地运行它时,它工作正常。


问题答案:

在使用主管和gunicorn部署Django应用程序时遇到了同样的问题。

解决的问题是将以下行添加到我的主管配置文件中:

environment=LANG="es_ES.utf8", LC_ALL="es_ES.UTF-8", LC_LANG="es_ES.UTF-8"

对于您的情况,请确保要打印的中文语言环境可用并已安装在Docker容器中。此博客描述了如何执行此操作:dockerfile示例(使用中文语言环境而不是en_CA.UTF-8):

FROM ubuntu:15.10
MAINTAINER Mobify <ops@mobify.com>

RUN apt-get -qq update && \
    apt-get -q -y upgrade && \
    apt-get install -y sudo curl wget locales && \
    rm -rf /var/lib/apt/lists/*

# Ensure that we always use UTF-8 and with Canadian English locale
RUN locale-gen en_CA.UTF-8

COPY ./default_locale /etc/default/locale
RUN chmod 0755 /etc/default/locale

ENV LC_ALL=en_CA.UTF-8
ENV LANG=en_CA.UTF-8
ENV LANGUAGE=en_CA.UTF-8

希望这会引导您走向正确的方向。



 类似资料:
  • 问题内容: 当我在Linux机器上使用默认的Java语言环境时,它带有美国语言环境设置,应在哪里进行更改以使其具有正确的语言环境? 问题答案: 我相信Java会从启动它的环境变量中收集这些信息,因此您需要确保正确设置LANG和LC_ *环境变量。 语言环境手册页包含有关所述环境变量的完整信息。

  • 问题内容: 当我尝试使用pelican3.3时,我键入了推荐的“ pelican-quickstart”,但出现了一些错误。 这些是错误: 我的操作系统是OS X Mavericks。 问题答案: 您可以尝试此处或此处发布的解决方案。基本上,向您的〜/ .bash_profile添加一些行: 有与此问题相关的未完成的错误报告。看来,Python对并非普遍有效的语言环境名称的格式做出了一些假设。显式

  • 问题内容: 我用来将货币从BigDecimal格式化为字符串。按预期工作,问题在于我们的主要目标是荷兰市场,而默认的荷兰格式很奇怪。 让我解释一下,当格式化-125时,荷兰语将得到“€125-”(预期为“-€125”)。英国按预期方式提供“-£125.50”。 我可以检查语言环境是否为荷兰语,然后在每次我要设置小数格式时都提供一个模式。但是我更喜欢一个解决方案,它可以覆盖荷兰的格式设置。我在考虑以

  • 我正在尝试在我的symfony 2.1网站上安装一个语言转换器。 我遵循官方文档,设置翻译文件,但使用$request设置语言环境- 然而,我仍然无法让它工作,我不太确定我的侦听器声明,它有什么问题吗? 我的控制器: 配置中的服务声明。yml: 我的路线:

  • 我正在Ubuntu中运行httpd+mod_jk+2个tomcat服务器。当我以非拉丁语言提交表单时,我会在DB中得到垃圾。如果我通过Tomcat提交相同的表单,直接绕过httpd,那么一切看起来都很好。以下是我的配置: /ETC/APACHE2/CONF.D/CHARSET: Tomcat1: Tomcat2: JDBC连接: jdbc:mysql://localhost:3306/myapp?

  • 在设定期间您可选择用于 M600 的语言。 您可选择以下语言之一: 广东话(香港) 丹麦语 荷兰语 英语(美国、英国) 芬兰语 法语(法国、加拿大) 德语 印度尼西亚语 意大利语 日语 韩语 中文(台湾) 挪威语(巴克摩) 波兰语 葡萄牙语(巴西) 俄语 西班牙语(美国、西班牙、拉美) 瑞典语 泰语 土耳其语 越南语 请注意,您的智能手表最终会将您的语言设定复制到手机。换句话说,即如您在 M600