Hỗ trợ mã hóa ký tự trong cơ sở dữ liệu địa lý và shapefiles


11

Tôi đã có một số cơ sở dữ liệu địa lý bao gồm các lớp tính năng với các chữ cái Hy Lạp trong rất nhiều thuộc tính. Khi tôi thử xuất một lớp đối tượng dưới dạng shapefile từ ArcCatalog, các thuộc tính được xử lý trong dữ liệu shapefile, một số loại vấn đề mã hóa ký tự (chúng trông giống như thế này trong hình dạng: ?? etr ?? e?). Điều tương tự cũng xảy ra khi tôi sử dụng ogr2ogr trong FWtools để chuyển đổi các lớp từ MDB sang KML, shp, v.v.

Có ai có kinh nghiệm cố gắng xử lý các định dạng mã hóa trên các định dạng dữ liệu GIS không?

Mục tiêu thực sự ở đây là đưa một số dữ liệu từ các cơ sở dữ liệu địa lý Esri này vào cơ sở dữ liệu Postgres / PostGIS, nhưng mã hóa bị hỏng sẽ không hoạt động. Tôi sẽ xuất từ ​​GeoDB sang shapefiles, sau đó tải chúng vào shp2pgsql. Đó có phải là con đường dễ nhất để đến đó?


2
Bạn có thể sử dụng QGIS để nhập shapfile với tùy chọn CP1256 và xuất nó với UTF8 để tránh sự cố không phải là Unicode

Câu trả lời:


10

Tôi nghĩ rằng bạn là một phần ở đó. Bạn có thể sử dụng iconvđể chuyển đổi từ mã hóa này sang mã hóa khác và bạn có thể sử dụng mã này như một phần của shp2pgsqlquy trình. Ví dụ:

shp2pgsql *postgrestablename* | iconv -f *sourceencoding* -t *targetencoding* | psql -d *yourdatabase*

Nếu bạn đang làm việc trong môi trường Linux thì iconvnên cài đặt. Đối với Windows, tôi tìm thấy LibIconv cho Windows . Nhưng tôi không có kinh nghiệm sử dụng iconvtrong Windows, vì vậy tôi không thể bảo đảm điều đó.

Hi vọng điêu nay co ich!

Jo


Vấn đề xảy ra trước khi shp2pgsql có thể được áp dụng. Các thuộc tính trong shapefile đã bị phá vỡ nếu tôi hiểu chính xác.
underdark


underdark, bạn đúng. Dữ liệu rất tệ trước khi tôi có thể đến bước shp2pgsql.
colemanm

Cảm ơn, mwalker ... giải pháp trên đã làm việc tuyệt vời cho đến nay! Tôi đã thay đổi định dạng CodePage thành UTF-8 và dữ liệu DBF shapefile hiển thị các ký tự chính xác ngay bây giờ. Và bằng cách sử dụng trình tải shapefile PostGIS trong QGIS, dữ liệu trong cơ sở dữ liệu PostGIS cũng chính xác.
colemanm

6

Bên dưới chi tiết về quy trình tôi đã sử dụng để chuyển đổi Tệp GeoDataBase với các trường tiếng Ả Rập thành shapefiles với mã hóa UTF-8 mở vui vẻ trong cả QGIS và ArcMap hiển thị chính xác cả tiếng Ả Rập và tiếng Anh (không sử dụng tiện ích mở rộng để xuất hoặc đọc):

  • Ý tưởng cơ bản là: từ FGDB xuất một shapefile bao gồm .dbf (mã hóa sai), sau đó xuất Bảng thuộc tính của cùng một lớp với văn bản (trong mã hóa đúng, là UTF-8) và sử dụng một chương trình khác để thay thế nội dung của shapefile .dbf bằng các trường dữ liệu UTF-8 thích hợp và lưu .dbf bằng mã hóa UTF-8. Sau đó thêm tệp .cpg vào mỗi shapefile để thông báo cho ArcGIS về mã hóa mới của .dbf. Các bước:

1) Thêm các lớp từ FGDB vào ArcMap (Tôi đã sử dụng 10.1, nhưng hoàn toàn không có lý do gì để nó không hoạt động trong các phiên bản trước, vì bit mã hóa xảy ra sau, bên ngoài Arc). Để xuất, nhấp chuột phải vào một lớp và chọn Dữ liệu-> Xuất dữ liệu, nhấp vào nút thư mục trong hộp thoại xuất để hiển thị hộp thoại Lưu và chọn Shapefile làm định dạng đầu ra.

1b) Phương pháp thay thế cho phương pháp trên: điều hướng đến FGDB trong ArcCatalog, nhấp chuột phải vào nó, chọn Xuất -> Để Shapefile (nhiều) và xuất toàn bộ FGCB dưới dạng một thư mục chứa đầy shapefile trong một thao tác).

2) Bây giờ bạn có một tập hợp các shapefile với chữ vô nghĩa trong đó chữ viết Ả Rập sẽ có (trên máy của tôi, nó hiển thị các dấu hỏi thay cho các ký tự). Các phần .dbf của chính các shapefiles, được mở trong Excel hoặc bất cứ thứ gì, có tiếng vô nghĩa thay vì tiếng Ả Rập; Đây không chỉ là vấn đề hiển thị trong chương trình GIS, mà chính các tệp .dbf không chứa các ký tự tiếng Ả Rập. Không hữu ích nào cả.

3) Trong ArcMap, mở Bảng thuộc tính của một lớp từ FGDB. Bảng mở ra với cả tiếng Anh và tiếng Ả Rập hiển thị đúng (đó là lý do FGDB được sử dụng ở vị trí đầu tiên). Trong menu Tùy chọn bảng của cửa sổ Bảng thuộc tính, chọn Xuất và trong hộp thoại Xuất dữ liệu, nhấp vào nút thư mục đầu ra để đến hộp thoại Lưu dữ liệu nơi bạn chọn Tệp văn bản làm loại đầu ra. Bây giờ bạn có một tệp văn bản sẽ mở trong Notepad bằng dấu phân cách dấu phẩy, được mã hóa dưới dạng UTF-8, với cả tiếng Anh và tiếng Ả Rập được mã hóa chính xác (tại thời điểm này, tiếng Ả Rập nên hiển thị đúng trong Notepad).

Bây giờ để có được thông tin đó vào các phần .dbf của các shapefiles!

4) Mở LibreScript Calc, một bản sao Excel miễn phí và mã nguồn mở để mở, thao tác và lưu tệp .dbf một cách dễ dàng, để mở tệp .dbf của một shapefile.

Nhân tiện, trong trường hợp này, tôi không sử dụng LibreOffice thay vì MS Office vì lý do ý thức hệ, mà đơn giản là vì tôi không thể tìm ra cách làm cho Excel lưu tệp .dbf, dễ dàng trong Calc, thực tế đó là tùy chọn mặc định khi nhấn Save sau khi đã mở và sửa đổi tệp .dbf trong Calc, trong khi Excel thực sự nói rằng tệp "không thể được lưu ở định dạng hiện tại" và không cung cấp một cách hữu ích để "lưu nó dưới định dạng mới nhất" (không có tùy chọn cho .dbf đi lên). Có các tiện ích mở rộng / plugin cho Excel có ý định thực hiện công việc (

Tệp .dbf trong Calc vẫn hiển thị tiếng vô nghĩa thay cho tiếng Ả Rập. Ngoài ra, hãy mở .csv mà bạn đã xuất từ ​​bảng thuộc tính của cùng một shapefile, đảm bảo bạn chỉ định UTF-8 là mã hóa (và dấu phẩy là dấu phân cách) trong đoạn hội thoại mở. Các tệp văn bản sẽ mở trong bảng tính Calc thứ hai với tiếng Ả Rập được hiển thị chính xác và chúng phải chứa các cột giống như .dbf cộng với cột OBRIID ở đầu. Sao chép-dán các cột từ .csv có chứa tiếng Ả Rập phù hợp vào .dbf (Tôi thực sự chỉ sao chép-dán toàn bộ bảng ngoại trừ cột ID ngoài cùng bên trái để tiết kiệm thời gian; dù sao thông tin cũng giống hệt nhau). Nhấn Save trong .dbf đã sửa đổi trong LibreScript (nó sẽ hỏi bạn có thực sự muốn sử dụng định dạng kỳ lạ như .dbf hay không, vâng, bạn làm thế).

Lặp lại quy trình này cho tất cả các thành phần .dbf của các shapefiles từ FGDB, thay thế tất cả các cột vô nghĩa bằng các chuỗi Ả Rập.

5) Ngay sau khi bạn đã lưu lại các phần .dbf với các cột tiếng Ả Rập được dán vào, bạn có thể mở các shapefile trong QGIS và chúng sẽ hoạt động chính xác trong cả hai ngôn ngữ, với điều kiện bạn chỉ định UTF-8 là mã hóa trong Nhập Vector Hộp thoại tập tin. Tuy nhiên, chúng vẫn không hoạt động chính xác trong ArcGIS (hoặc ít nhất là không phải trong tất cả các phiên bản) vì ArcGIS không tự động nhận dạng mã hóa hoặc cho phép bạn chọn nó khi bạn thêm shapefile vào dự án. Arc cần một thành phần riêng cho shapefile, được gọi là tệp Chuyển đổi trang mã (.cpg), để hướng dẫn nó mã hóa để đọc.

6) Sử dụng trình soạn thảo văn bản (notepad, nano hoặc bất cứ thứ gì, nhưng không phải Word hoặc bất kỳ trình xử lý văn bản nào khác) để tạo tệp văn bản chỉ chứa năm ký tự "UTF-8". Lưu nó dưới dạng .cpg cho mỗi shapefile (Tôi chỉ cần nhấp vào một phần của shapefile trong đoạn hội thoại Save As, sau đó xóa phần mở rộng và thêm .cpg), trong cùng thư mục với shapefile (về cơ bản nó trở thành một phần khác củaHi các shapefile đa phần). Phần mở rộng .cpg cho Arc biết rằng đây là tệp chứa thông tin về mã hóa của tệp .dbf; một khi nó được đưa vào shapefile cùng với các anh chị em cùng tên nhưng khác nhau, mã hóa của shapefile giờ được ArcGIS tự động nhận ra.

7) Voila. Bây giờ bạn có các shapefile chứa cả chuỗi tiếng Anh và tiếng Ả Rập, theo như tôi có thể nói chính xác như chúng có trong File GeoDataBase ban đầu. Chúng mở trong các bản cài đặt của tôi cả ArcMap và QGIS và trong cả hai trường hợp, các chuỗi trong cả hai ngôn ngữ đều hiển thị chính xác bao gồm cả trong nhãn bản đồ.

Hãy cẩn thận:

  • Không phải tất cả các bản sao của ArcGIS dường như xuất bảng thuộc tính dưới dạng tệp văn bản được điền đúng (trên ít nhất một máy tính, cố gắng xuất bảng thuộc tính sang tệp văn bản dẫn đến một tệp chỉ có các tiêu đề, không phải các dòng dữ liệu. KHÔNG phải là hành vi đúng đắn của Arc (tất nhiên là nó có thể xuất Bảng thuộc tính dưới dạng văn bản), nhưng nó có thể xuất hiện đối với một số người dùng. Điều này làm cho các bước còn lại không thể thực hiện được.

  • Dường như ArcGIS sẽ không lưu các shapefile mới với mã hóa UTF-8. Điều này sẽ chỉ ảnh hưởng đến người dùng muốn tạo các shapefile mới từ dữ liệu, chứ không phải những người chỉ muốn hiển thị, sửa đổi và sử dụng chúng để tạo bản đồ. Cách giải quyết có vẻ liên quan đến việc gây rối với sổ đăng ký Windows của bạn như được nêu chi tiết tại đây: ( http://support.esri.com/cn/ledgeledridease/techarticles/detail/21106 ). Tôi đã không phải đối phó với nó bởi vì cả ArcGIS và QGIS của tôi dường như đều vui vẻ nhận ra các shapefile mà tôi đã lưu bằng quy trình trên và tôi có thể sửa đổi các mục hình học và bảng hoặc thậm chí thêm đa giác mới với nhiều văn bản tiếng Ả Rập hơn mà không gặp vấn đề rõ ràng nào ( mặc dù Arc dường như không muốn lưu các shapefile mới bằng mã hóa UTF-8, nhưng có vẻ như họ sẵn sàng cập nhật / lưu lại chúng).

  • Tôi giả định rằng chức năng của LibreOffice giống với Windows như trên máy tính của tôi. Tôi sử dụng GNU / Linux cho hầu hết các công việc của mình và chỉ khởi động vào Windows nếu tôi cần sử dụng ArcGIS hoặc Autocad cho một số tác vụ khác, vì vậy tôi đã sửa đổi tệp .dbf trong Libreoffice chạy trên Fedora. Tôi cho rằng nó hoạt động theo cách tương tự trên Windows, nhưng tôi không thể kiểm tra rằng nếu không cài đặt LibreOffice trên phân vùng Windows của tôi và kết nối Internet hiện tại của tôi hơi chậm đối với các tải xuống không cần thiết. Có các plugin cho Excel cho phép bạn lưu các tệp .dbf trong một mã hóa đã chọn (ví dụ: exceltodbf.sourceforge.net/), nhưng tôi chưa thử chúng. Có thể có nhiều cách khác để thao túng và lưu .dbf, nhưng tôi đã không xem xét chúng sau khi tìm ra cách dễ dàng hợp lý để làm điều đó với LibreOffice.

  • Toàn bộ vấn đề dường như có thể tránh được nếu bạn trả tiền cho tiện ích mở rộng Bản đồ sản xuất trong ArcGIS, cho phép bạn chuyển đổi trực tiếp FGDB thành shapefiles bằng mã hóa UTF-8 theo trang này: http://resource.arcgis.com/en/help /main/10.1/index.html#//0103000001m1000000 . Tại sao chức năng khá cơ bản này (Unicode đã xuất hiện được một thời gian và có rất nhiều ngôn ngữ khác ngoài tiếng Anh) chỉ dành cho những khách hàng trả thêm tiền là câu hỏi dành cho ESRI.


0

Trước tiên, bạn cần tìm ra cách mã hóa dữ liệu đầu vào, vì vậy bạn có thể cho các công cụ của mình biết cách chuyển đổi dữ liệu thành một mã hóa phù hợp. Nếu bạn có quyền truy cập, tôi sẽ thử xuất bảng thành văn bản trực tiếp từ MDB và đặt mã hóa đầu ra thành UTF8. Nếu bạn mở shapefile đã xuất trong ArcGIS, mã hóa có được đặt chính xác không? DBF hỗ trợ các trang mã và có thể OGR không chọn đúng trang để chuyển đổi.

Ngoài ra còn có các cách ép buộc MDBtools (được sử dụng như một phần của trình điều khiển OGR) để đặt rõ ràng luồng đầu vào, nhưng trước tiên tôi nên thử các cách tiếp cận khác.


0

Tôi sẽ thay vì đi đến ArcGIS. Chỉ cần đặt mã hóa thành UTF-8 trong ArcGIS bằng cách làm theo hướng dẫn từ đây . Sau đó, chỉ xuất các lớp tính năng sang ShapeFile. Bây giờ bạn sẽ nhận được một tệp CPG (tệp trang mã) bổ sung với mỗi lớp. Đây chỉ là một tệp văn bản có chuỗi "UTF-8" trong đó và tất cả dữ liệu của bạn được mã hóa tự động thành UTF-8.

Nếu bạn quan tâm đến việc sử dụng mã hóa khác, chỉ cần xem hướng dẫn.

Điều quan trọng là sau khi hoàn thành nhiệm vụ này, bạn nên thay đổi cài đặt này thành giá trị mặc định vì nếu bạn giữ giá trị này ví dụ "UTF-8" thì trong tương lai ArcGIS sẽ xuất tất cả ShapeFiles bằng mã hóa "UTF-8".

Hy vọng rằng sẽ giúp bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.