首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python2.7utf-8在Windows7中通过命令行输入

Python2.7utf-8在Windows7中通过命令行输入
EN

Stack Overflow用户
提问于 2013-05-24 23:17:56
回答 1查看 1K关注 0票数 0

我是个新手,我相信过去也有过类似的问题,但我很难找到/理解答案。提前感谢你对我的耐心!

因此,我试图编写一个脚本来读取utf-8编码的输入文件中的行,将其部分与用户传入的可选命令行参数进行比较,如果匹配,则在将其打印到输出文件之前对该行执行一些操作。我使用codecs打开文件。

我现在正在使用argparse模块来解析命令行参数。文件中的行可以是各种语言,因此命令行参数也需要utf-8。

例如,

文件中的一行可能如下所示:

разъедают {. r ax z . j je . d ax1 . ju t .}

应该从命令行调用脚本,如下所示:

>python myscript.py mytextfile.txt -grapheme ъ

下面是我的代码中应该进行处理的部分。在这种情况下,orth是一些西里尔文本,而grapheme是一个西里尔字符。

代码语言:javascript
复制
def process_orth(orth, grapheme):
    grapheme = grapheme.decode(sys.stdin.encoding).encode('utf-8')
    if (grapheme in orth):
        print 'success, your grapheme was: ' + grapheme.encode('utf-8')
        return True
    else:
        print 'failure, your grapheme was: ' + grapheme.encode('utf-8')
        return False

不幸的是,尽管字形素确实存在,但函数返回false并打印问号而不是字素:

failure, your grapheme was: ?

我试着在process_orth()的开头添加以下内容,就像我读过的其他文章所推荐的那样,但似乎不起作用:

grapheme.decode(sys.stdin.encoding).encode('utf-8')

所以我的问题是.

如何将utf-8字符串通过命令行传递到python脚本中?另外,在Windows7上是否有任何额外的怪癖(安装cygwin是否会改变任何事情)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-24 23:34:05

如果您使用codecs.open()打开输入文件,那么您有unicode数据,而不是编码数据。您可能只想解码grapheme,而不是再次将其编码到UTF-8:

代码语言:javascript
复制
grapheme = grapheme.decode(sys.stdin.encoding)
if grapheme in orth:
    print u'success, your grapheme was: ' + grapheme
    return True

注意,我们也打印unicode;通常情况下,print将确保Unicode值为当前代码页再次编码。这仍然可能失败,因为Windows的打印是众所周知的困难,参见http://wiki.python.org/moin/PrintFails

不幸的是,由于sys.argv使用的是非unicode感知的系统调用,所以Windows上的显然会导致混乱。有关支持unicode的替代方案,请参见Read Unicode characters from command-line arguments in Python 2.x on Windows

我认为argparse在Unicode输入方面没有任何问题,但是如果它有问题,您可以始终从win32_unicode_argv()获取unicode输出,并在将其传递给argparse之前将其编码到UTF-8。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16744826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档