我正在尝试用python运行CLI脚本,但是由于特殊字符,我遇到了一些问题。 所以如果我运行这个程序,它就可以正常工作。 将“Innjsø”层写入名为“innsjo”的数据库作为表名。你知道吗
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=postgres password=postgres "C:\path\GML.gml" Innsjø -nln innsjo
然而,我试图以编程的方式运行它,却遇到了特殊字符的问题。你知道吗
command = [
"C:\\Program Files\\QGIS 2.18\\bin\\ogr2ogr.exe",
"-f",
"PostgreSQL",
"PG:host=localhost user=postgres password=postgres
loadfile,
gml_layer_name,
"-nln", set_table_name
]
subprocess.check_call(command)
如果变量layer\u name包含特殊字符,则会出现此错误。只使用拉丁字符的图层效果很好。你知道吗
ERROR 1: Couldn't fetch requested layer 'Innsj°'!
我无法控制GML文件中的层被称为什么。如何使用名称包含特殊字符的python运行CLI脚本?你知道吗
我可以用一个小小的C程序转储其参数的代码点来部分复制。所发生的是,Windows上的python3是一个完全支持unicode的程序,因此
subprocess
使用underhoodCreateProcessW
并用宽字符传递命令行。因此,当子程序使用窄字符时,Windows会将宽字符转换为默认的ANSI代码页,即用于西欧语言的CP1252。你知道吗具体来说,似乎没有使用控制台代码页。你知道吗
因此,最可靠的方法是使用控制台中的1252代码页:
chcp 1252
。你知道吗问题是,如果层名称存储为cp850字节字符串,那么现在所有非ASCII字符的值都会错误。你知道吗
在这种情况下,一种可能的解决方法是将字符串编码为
cp850
,并将其解码为cp1252
。这样,当系统库将其编码为cp1252
时,您将得到预期的cp850值。你知道吗它将在这里工作,因为
'ø'.encode('cp850').decode('cp1252')
存在(它是字符U+203A›
单右指角引号)。所以这应该有效:(*)如需参考,以下是用于转储命令行参数的代码点的C代码:
相关问题 更多 >
编程相关推荐