具有波斯语/阿拉伯语字符的Python 3 print() 函数[重复]

2023-12-12

我简化了代码以便更好地理解。 这是问题所在:

case 1:

# -*- coding: utf-8 -*-

text = "چرا کار نمیکنی؟" # also using u"...." results the same
print(text)

output:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

case 2:

text = "چرا کار نمیکنی؟".encode("utf-8") 
print(text)

没有输出。

case 3:

import sys

text = "چرا کار نمیکنی؟".encode("utf-8")
sys.stdout.buffer.write(text)

output:

چرا کار نمیکنی؟

我知道情况 3 可以某种方式工作,但我想使用其他函数,如 print() 、 write(str()) 等。

我还阅读了有关 Unicode 的 python 3 文档here.

还阅读了 stackoverflow 中的数十个问答。

and here是一篇很长的文章,解释了 python 2.X 的问题和答案

简单的问题是:

如何使用 python print() 函数打印波斯语或阿拉伯语等非 ASCII 字符?

更新1: 正如许多人建议的那样,问题与我测试过的终端有关:

case 4 :

text = "چرا کار نمیکنی؟" .encode("utf-8")# also using u"...." results the same
print(text)

终端 :

python persian_encoding.py > test.txt

测试.txt:

b'\xda\x86\xd8\xb1\xd8\xa7 \xda\xa9\xd8\xa7\xd8\xb1 \xd9\x86\xd9\x85\xdb\x8c\xda\xa9\xd9\x86\xdb\x8c\xd8\x9f'

非常重要的更新:

经过一段时间的研究这个问题,最后我找到了另一种解决方法来让 cmd.exe 完成这项工作(不需要 ConEmu 等第三方软件或......):

首先稍微解释一下:

我们的主要问题与Python无关。这是 Windows 中命令提示符字符集的问题(有关完整说明,请查看 Arman 的答案) 所以...如果您将 Windows 命令提示符的字符集更改为 UTF-8 而不是默认的 ascii ,那么命令提示符将能够与 UTF-8 字符(如波斯语或阿拉伯语)交互,此解决方案不能保证良好的表示字符(因为它们会像小方块一样打印出来),但如果你想在 python 中使用 UTF-8 字符进行文件 I/O,这是一个很好的解决方案。

Steps:

在从命令行启动 python 之前,输入:

chcp 65001

现在像往常一样运行你的 python 代码。

python testcode.py

情况1的结果:

?????? ??? ??????

它运行没有错误。

截屏:

enter image description here

有关如何将 65001 设置为默认字符集的更多信息,请检查this out.


您的代码是正确的,因为它可以在我的计算机上运行Python 2和3(我使用的是OS X):

~$ python -c 'print "تست"'
تست
~$ python3 -c 'print("تست")'
تست

问题在于您的终端无法输出 unicode 字符。您可以通过将输出重定向到类似文件来验证它python3 my_file.py > test.txt并使用编辑器打开文件。

如果您使用的是 Windows,您可以使用类似的终端Console2 or ConEmu这使得 unicode 的呈现效果比 Windows 提示符更好。

由于 Windows 的代码页/编码错误,您也可能会在这些终端上遇到错误。有一个小的 python 包可以修复它们(正确设置它们):

1-安装this pip install win-unicode-console

2-将其放在 python 文件的顶部:

try:
    # Fix UTF8 output issues on Windows console.
    # Does nothing if package is not installed
    from win_unicode_console import enable
    enable()
except ImportError:
    pass

如果重定向到文件时出现错误,可以通过设置 io 编码来修复它:

在 Windows 命令行上:

SET PYTHONIOENCODING=utf-8

在 Linux/OS X 终端上:

export PYTHONIOENCODING=utf-8

几点

  • 没有必要使用u"aaa"python 3 中的语法。默认情况下,字符串文字是 unicode。
  • 在 python 3 中,文件的默认编码是 UTF8,因此编码声明注释(例如# -*- coding: utf-8 -*-) 不需要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有波斯语/阿拉伯语字符的Python 3 print() 函数[重复] 的相关文章

随机推荐

  • 如何在Spring Data中进行Mongo聚合查询?

    这是我第一次在 Java 中使用 Mongo 这个聚合查询遇到了一些问题 我可以在 Mongo for Spring 中执行一些简单的查询 Query我的存储库接口中的注释扩展了MongoRepository
  • Python:在模块和类之间共享全局变量

    我知道在 Python 中可以跨模块共享全局变量 然而 我想知道这在多大程度上是可能的以及为什么 例如 全局mod py x None mid access mod py from global mod import class delta
  • 来自带有构造函数参数的 lambda 的 RelayCommand

    如果在 XAML 文件中 我将一个 Button 绑定到以下类中的 Command 则单击该 Button 不会导致执行 DoIt class Thing public Thing Foo p1 Command new RelayComma
  • 在正则表达式 python 中使用变量

    值得离开的是 这是我学习 Python 的第二天 而且我对这门语言不是很专业 任何低水平且易于理解的建议将不胜感激 我想在 python 的正则表达式中使用变量 我读过这个问题如何在正则表达式中使用变量 没有任何运气的答案 Code imp
  • 如何对数字进行四舍五入

    我如何能够将这些数字四舍五入到小数点后两位 这些数字全部存储在由网络抓取工具输出的变量中 4 7532 4 7294 4 7056 4 6822857142857 4 65868 4 63522 4 6119866666667 4 5889
  • 修复 IE9 中的 jQuery 拆分器

    Update 这个问题是关于多窗格分割器除了 IE9 之外 它在所有浏览器中都运行良好 右窗格子项的宽度不会随着窗口大小的调整而相应调整 在我的应用程序的上下文中 我还必须使用 setTimeout 0 延迟将右窗格分割方法放在不同的 ja
  • 使用 python selenium chromedriver 从源中选择隐藏选项值

    我正在阅读 Docx 文件 这里是link 解析其中的一些文本 然后使用 python selenium 绑定和 chrome driver 我尝试单击源中的隐藏选项值 driver page source 我知道它无法选择 到目前为止 这
  • 帮助定义全局名称

    My Code def A a A print a return def B print a in B return 当 B 输入解释器时我得到 Traceback most recent call last File
  • RoR - 如何删除 Rails 4.1.1 版本?

    我是 RoR 新手 我尝试遵循 Micheal Hartl 的 Ruby on Rails 教程 在开始本教程之前 我已经提前设置了所有内容 并将 Rails 版本更新为 4 1 1 一切都运行良好 直到教程中我需要有最高 4 0 5 版本
  • Openmp 代码的推力当量

    我尝试在 open mp 中并行化的代码是蒙特卡罗 可归结为如下所示 int seed 0 std mt19937 rng seed double result 0 0 int N 1000 pragma omp parallel for
  • 如何将整数数组转换为树?

    这里有 100 个数字 每行 10 个 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
  • 如何更改 WooCommerce 中的帐单地址字段标签

    在我的设计中 我有非标准计费字段标签和标记 例如 城镇 城市 应为 省 我使用过WOO文档 并过滤woocommerce billing fields 它适用于类名 占位符 创建新字段 但我无法更改标签 out arr billing ci
  • const 引用数据成员绑定到临时初始化构造函数中的引用

    考虑以下代码 include
  • 当多次调用外部函数时,php 中的嵌套函数会引发异常

    以免假设我有以下内容 function a function b a pass a error 为什么在第二次调用中抛出异常并且它说 cannot re declare function b 我认为每个函数调用都会创建一个新的活动记录 它包
  • 是否可以更改 h:outputStylesheet 和 h:outputScript 使用的 /resources 文件夹名称

    引用css文件和js文件时是否需要给文件夹名称 resources h outputStylesheet and h outputScript 因为当我给出文件夹名称 assets 而不是 resources 时 这些文件不会加载 这就是我
  • 将 iPad 应用程序转换为 iPhone 应用程序?

    我编写了一个基于选项卡的 iPad 应用程序 效果很好 我从来没有打算让它成为一个 iPhone 应用程序 因为它显示的内容确实不适合这么小的屏幕 然而 我收到了很多要求该应用程序也与 iPhone 兼容的请求 有人可以向我指出一些文档的方
  • Javascript 无缘无故地将浮点数转换为整数

    我编写了一个函数 它的行为根据其参数的数字类型而有所不同 整数或浮点数 使用这个问题中的一些代码如何检查一个数字是浮点数还是整数 很容易检测是否浮动 但后来我偶然发现了 javascript 强制转换的情况1 0 to 1如果您使用该号码调
  • 莫里斯图未更新

    我的更新有问题morris js条形图 当页面加载时 我有以下函数 它运行良好并创建了一个漂亮的图表 document ready function if projectViewTotal length chart Morris Bar e
  • 从数据库中检索一行作为 Hibernate 中的映射

    Table Players ID name email age 1 bob null 23 该表是类的实例Player被持久化 每个实例一行 没有组合等 冬眠Session 我如何获得该行 假设 id PK 等于 1 作为 Java 地图
  • 具有波斯语/阿拉伯语字符的Python 3 print() 函数[重复]

    这个问题在这里已经有答案了 我简化了代码以便更好地理解 这是问题所在 case 1 coding utf 8 text also using u results the same print text output UnicodeEncod