我是个新手,我相信过去也有过类似的问题,但我很难找到/理解答案。提前感谢你对我的耐心!
因此,我试图编写一个脚本来读取utf-8编码的输入文件中的行,将其部分与用户传入的可选命令行参数进行比较,如果匹配,则在将其打印到输出文件之前对该行执行一些操作。我使用codecs打开文件。
我现在正在使用argparse模块来解析命令行参数。文件中的行可以是各种语言,因此命令行参数也需要utf-8。
例如,:
文件中的一行可能如下所示:
разъедают {. r ax z . j je . d ax1 . ju t .}
应该从命令行调用脚本,如下所示:
>python myscript.py mytextfile.txt -grapheme ъ
下面是我的代码中应该进行处理的部分。在这种情况下,orth是一些西里尔文本,而grapheme是一个西里尔字符。
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是否会改变任何事情)?
发布于 2013-05-24 23:34:05
如果您使用codecs.open()打开输入文件,那么您有unicode数据,而不是编码数据。您可能只想解码grapheme,而不是再次将其编码到UTF-8:
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。
https://stackoverflow.com/questions/16744826
复制相似问题