相关疑难解决方法(0)

为什么脚本语言不能将Unicode输出到Windows控制台?

Windows控制台至少可以识别十年,并且可能早在Windows NT上.但是由于某些原因,主要的跨平台脚​​本语言(包括Perl和Python)只输出各种8位编码,因此需要很多麻烦才能解决.Perl给出了"打印中的宽字符"警告,Python给出了一个charmap错误并退出.为什么在这么多年之后它们不仅仅是简单地调用输出UTF-16 Unicode的Win32 -W API而不是通过ANSI /代码页瓶颈强制一切?

仅仅是跨平台性能是低优先级吗?这些语言是否在内部使用UTF-8并且发现输出UTF-16太麻烦了?或者-WAP本身是否破坏到不能按原样使用的程度?

UPDATE

似乎责任可能需要各方共同承担责任.我想象脚本语言只能wprintf在Windows上调用,让操作系统/运行时担心重定向等问题.但事实证明,即使是Windows上的wprintf,也会在打印到控制台之前将宽字符转换为ANSI并返回!

如果这个问题已得到解决,请告诉我,因为错误报告链接似乎已损坏但我的Visual C测试代码仍然无法用于wprintf并成功用于WriteConsoleW.

更新2

实际上,您可以使用C语言将UTF-16打印到控制台,wprintf但前提是这样做_setmode(_fileno(stdout), _O_U16TEXT).

从C你可以将UTF-8打印到一个控制台,其代码页设置为代码页65001,但Perl,Python,PHP和Ruby都有防止这种情况的错误.Perl和PHP通过在包含至少一个宽字符的行之后添加额外的空行来破坏输出.Ruby的损坏输出略有不同.Python崩溃了.

更新3

Node.js是第一个没有出现此问题的脚本语言.

Python开发团队慢慢意识到这是一个真正的问题,因为它是在2007年底首次报道的,并且已经看到了大量的活动,以完全理解并完全修复2016年的错误.

python windows unicode console perl

19
推荐指数
4
解决办法
2740
查看次数

Python 3 print()函数,带有波斯语/阿拉伯字符

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

情况1:

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

text = "??? ??? ???????" # also using u"...." results the same
print(text)
Run Code Online (Sandbox Code Playgroud)

输出:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

案例2:

text = "??? ??? ???????".encode("utf-8") 
print(text)
Run Code Online (Sandbox Code Playgroud)

没有输出.

案例 3:

import sys

text = "??? ??? ???????".encode("utf-8")
sys.stdout.buffer.write(text)
Run Code Online (Sandbox Code Playgroud)

输出:

??? ??? ???????
Run Code Online (Sandbox Code Playgroud)

我知道案例3以某种方式工作,但我想使用其他函数,如print(),write(str()),....

我也读蟒蛇3关于为Unicode文件在这里.

并且还在stackoverflow中阅读了几十个问答.

这里是一个很长的文章解释蟒蛇2.X的问题和答案

简单的问题是:

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

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

案例4:

text = "??? ??? ???????" .encode("utf-8")# also using u"...." results the …
Run Code Online (Sandbox Code Playgroud)

python unicode utf-8 python-3.x

11
推荐指数
2
解决办法
7764
查看次数

在python中读取以utf-8编码的阿拉伯语文本

我使用的是Python 2.7.我从utf-8编码的文本文件中获得以下行(字符串):

"???? ???? ?????? ?????? ????? ?????? ????? ???? ??? ?????? ?? ??? ?? ?? ?? ????"
Run Code Online (Sandbox Code Playgroud)

我使用以下代码在屏幕上打印它:

import codecs
filename = codecs.open('file path', 'r', encoding="utf-8")
outputfile = filename.readlines()
print outputfile
Run Code Online (Sandbox Code Playgroud)

它给出了以下输出:

[u'\ufeff\u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u062e\u0628\u0631\u0648\u06ba\u060c \u0628\u0631\u06cc\u06a9\u0646\u06af \u0646\u06cc\u0648\u0632\u060c \u0648\u06cc\u0688\u06cc\u0648\u060c \u0622\u0688\u06cc\u0648\u060c \u0641\u06cc\u0686\u0631 \u0627\u0648\u0631 \u062a\u062c\u0632\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc \u0628\u06cc \u0633\u06cc \u0627\u0631\u062f\u0648 \u06a9\u06cc \u0648\u06cc\u0628']
Run Code Online (Sandbox Code Playgroud)

目的是正确打印文本,而不是如何打印每一行.那么,如何以原始形式正确打印文本文件的字符串或内容?喜欢:

???? ???? ?????? ?????? ????? ?????? ????? ???? ??? ?????? ?? ??? ?? ?? ?? ????     
Run Code Online (Sandbox Code Playgroud)

python encoding utf-8

5
推荐指数
1
解决办法
6130
查看次数

无法打印出请求的文字?

我正在尝试在Python中打印出以下请求(使用请求模块):

r = requests.get("http://www.youtube.com", 
                params={
                    "search_query": "test"
                }).text 
Run Code Online (Sandbox Code Playgroud)

但是,在打印时,我收到以下错误:

UnicodeEncodeError:'charmap'编解码器不能编码位置32891-32894中的字符:字符映射到 <undefined>

我确定这不是模块本身,因为基于一些谷歌搜索似乎没有其他事件发生,并且它正在与我尝试的其他请求一起工作.似乎只有这个请求无法打印.

有谁知道如何打印它?

编辑:现在我真的很困惑:这个程序对我来说只运行了一次,并且自那次出现之后就没有工作过一次.

python get request character-encoding codec

4
推荐指数
1
解决办法
2944
查看次数