更改Shapefile数据源编码?


9

我试图通过属性更改唯一的shapefile数据源编码,以及如何将shapefile从LATIN1编码为UTF-8?但这并没有改变。

如果不保存QGIS项目,是否不能直接更改shapefile数据源编码?

我也尝试了这段代码,它显示了更改编码,但是当我再次打开shapefile时,它显示了相同的旧系统编码:

for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    layer.setProviderEncoding(u'UTF-8')
    layer.dataProvider().setEncoding(u'UTF-8')
    print layer.name(), layer.dataProvider().encoding()  

(我不是保存QGIS项目,而是直接访问和保存shapefile。保存项目并执行此任务后,它将正常工作


您可以看一下插件中的代码:shapefile_encoding_fixer
Jakob,

我可以通过qgis保存在shapefile中而不保存项目吗?
穆罕默德·法赞汗

您是否尝试过右键单击图层并使用该Save As...选项?
约瑟夫

@Joseph是的,当然,我已经在我的帖子中提到了这个答案!我将打开的形状文件定向到qgis项目中,并通过另存为更改其编码,但是当我再次打开它时,它仍然保留到系统中(未更改)。
穆罕默德·法赞汗

@Joseph我没有保存qgis项目,当我保存qgis项目并通过它打开shape文件时,它可以正常工作!
穆罕默德·法赞汗

Answers:


13

从菜单栏中,转到:

Settings > Options > Data Sources > Data source handling

并取消选中“ 忽略shapefile编码声明”设置:

编码设定

这会将所有加载到QGIS中的图层设置为默认编码为 UTF-8


1
还要感谢@Joseph对于将来的用户,此链接对hub.qgis.org/issues/13203也很有帮助。实际上,忽略shapefile编码声明选中的选项会忽略utf-8设置。其忽略.cpg文件。
穆罕默德·法赞汗

@MohammadFaizanKhan-非常欢迎和感谢您的链接:)
约瑟夫

7

要概述可以设置编码的其他位置:

当您打开shapefile时: 将shp打开为

当您打开CSV时: 添加CSV

保存矢量文件时: 将矢量文件另存为

在图层属性中:
图层属性

并且,正如@Joseph所提到的,您可能应该取消选中“忽略shapefile编码声明”设置。


谢谢胜利者,您的最后一行对我有很大帮助。hub.qgis.org/issues/13203
穆罕默德·法赞汗

3

使用时Save As ...,必须选择其他文件名,然后选择Add file to canvas

结果,您也必须保存项目以在其中获得新的shapefile。未保存的项目仍然包括未修改的shapefile和错误的编码。

顺便说一句Data encoding,“图层”属性中的是项目文件的一部分,而不是shapefile。您的代码示例未在shapefile内写入任何内容,它仅更改了项目的图层设置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.