NO IMAGE

原文連結: http://support.esri.com/en/knowledgebase/techarticles/detail/21106

相關連結:http://blog.csdn.net/fidelhl/article/details/17318797

Technical ArticleHowTo:讀寫shapefile和資料庫檔案編碼在不同的內碼表

文章ID: 21106年
軟體:  ArcGIS——ArcEditor 9.2,9.3,裝置上裝,10 ArcGIS——ArcInfo 9.2,9.3,裝置上裝,10 ArcGIS——ArcView 9.2,9.3,裝置上裝,10ArcGIS
Server(10.0前) 10 ArcGIS桌面先進 10.1,10.2,10.2.1 ArcGIS桌面標準 10.1,10.2,10.2.1 ArcGIS桌面基本10.1,10.2,10.2.1 ArcGIS的伺服器 10.2
平臺:  窗戶 Server
2003 XP,Vista伺服器2003年,Windows 7,Windows 8,伺服器2012 Server 2008 R2

總結

Esri公司實現了一個“內碼表轉換”功能在ArcGIS桌面(ArcMap、ArcCatalog ArcToolbox)允許桌面應用程式讀寫shapefile和資料庫檔案編碼在不同的內碼表。 資料庫檔案的內碼表轉換功能(稱為“dbfDefault”)被啟用通過指定一個內碼表值在系統登錄檔。
這非常類似於&CODEPAGE函式用於ArcInfo工作站。 

ArcGIS 10.2.1之前,以下技術可用於設定所需的內碼表行為。 

在每個shapefile的頭(.DBF),包括一個引用內碼表。
ArcGIS 10.2.1之前,所使用的內碼表對應於使用者的語言環境。 例如,如果使用者在日本地區,使用的內碼表。 DBF檔案“Shft-JIS”。 

在ArcGIS 10.2.1,預設內碼表設定為utf – 8(UNICODE)shapefile(.DBF)。 這是常數和當前的國際化實踐應該確保資料可讀。

“dbfDefault”設定是做什麼的? 

通過設定一個內碼表值在系統登錄檔,使用者可以讀取和寫入shapefile和資料庫檔案編碼的內碼表。 例如,使用者可以匯出一個shapefile編碼在OEM通過設定內碼表登錄檔值OEM。 使用者還可以讀shapefile和資料庫檔案沒有內碼表資訊儲存在檔案中,只要使用者知道哪些內碼表檔案編碼。 

為什麼設定“dbfDefault”? 

當開啟一個shapefile和資料庫檔案在ArcGIS桌面,桌面程式看看語言驅動程式ID(LDID)的頭一個資料庫檔案,或一個關聯的*。 中央檔案,該檔案用於定義內碼表和幫助確定讀檔案的內碼表。
基於內碼表資訊檢索,ArcGIS的桌面顯示相應的字串通過執行一個內碼表轉換,如果它是必要的。 如果一個資料庫檔案缺乏LDID或。 中央檔案,它假設檔案編碼在Windows(ANSI /多位元組)內碼表。 

如果桌面程式讀取資料庫檔案編碼在OEM但檔案不包含任何內碼表資訊或沒有LDID或。 中央檔案,字元不正確顯示。 這是因為桌面程式假設檔案是ANSI編碼的內碼表,因為它找不到內碼表的資訊,而檔案實際上是被編碼在OEM。
這意味著ArcGIS對待OEM檔案作為ANSI編碼,導致一個不正確的8位字元儲存在檔案的顯示。 

大多數shapefile和資料庫檔案應該有內碼表資訊儲存在檔案中。 一些專案,比如Microsoft Access 2000和Excel 2000、編碼OEM資料庫檔案,但不包括LDID內碼表的資訊,所以ArcGIS不讀正確的檔案。
為了避免這個問題,使用者可以設定dbfDefault之前適當的內碼表開啟一個檔案,缺少內碼表的資訊。 

“dbfDefault”是如何工作的? 

“dbfDefault”設定在系統登錄檔定義的內碼表shapefile檔案和資料庫檔案匯出。 shapefile檔案和資料庫的內碼表建立在ArcGIS桌面編碼由系統定義的內碼表註冊的“dbfDefault”價值。
例如,如果“dbfDefault”設定為OEM,shapefile ArcMap建立的資料庫檔案,在OEM ArcCatalog,ArcToolbox編碼。 另外,如果“dbfDefault”設定為ANSI,shapefile ANSI編碼和資料庫檔案。 

重要的是要注意,有一個例外:shapefile出口險ArcCatalog ArcToolbox,西班牙語和阿拉伯語以外的語言編碼在OEM,不管dbfDefault設定。 這是因為“覆蓋Shapefile”ArcToolbox使用ArcInfo工作站的功能,定義層執行在DOS,所以輸出檔案總是用OEM內碼表編碼或DOS內碼表。
shapefile出口險ArcCatalog ArcToolbox,西班牙語和阿拉伯語是ANSI編碼。 

▪shapefile輸出從覆蓋率ArcCatalog ArcToolbox總是在OEM內碼表(西班牙除外)。 

同樣的邏輯也適用於shapefile和資料庫檔案讀入ArcGIS桌面;如果一個shapefile或缺乏LDID或資料庫檔案。 中央檔案,ArcGIS假設檔案編碼dbfDefault定義的內碼表。
例如,如果dbfDefault值設定為OEM和缺乏LDID和資料庫檔案。 中央檔案,ArcGIS OEM桌面假設檔案編碼,因此執行一個內碼表轉換顯示8位字元ArcMap和ArcCatalog(因為這兩個應用程式使用ANSI的Windows程式內碼表來顯示字串)。 

如果使用者有dbfDefault值設定為特定的內碼表,所有shapefile和資料庫檔案匯出在ArcGIS編碼的內碼表。
所有shapefile和資料庫檔案,沒有內碼表資訊假定的內碼表。 因此,重要的是要設定dbfDefault值回其預設值(沒有價值)當任務完成。

dbfDefault可用的程式是什麼? 

ArcGIS的桌面是唯一程式dbfDefault設定的影響。 其他專案,如ArcInfo工作站和ArcView 3。 x,或其他內碼表設定如“&CODEPAGE”功能用於ArcInfo工作站和ArcView
3中使用的內碼表資料。 x,不受影響。 

在ArcInfo工作站, 

▪ARCSHAPE &CODEPAGE OEM建立一個shapefile OEM 
▪ARCSHAPE &CODEPAGE ANSI建立一個shapefile ANSI 
▪INFODBASE OEM &CODEPAGE OEM建立一個資料庫檔案 
▪INFODBASE ANSI &CODEPAGE ANSI建立一個資料庫檔案 

在ArcView 3. x, 

▪Shapefile和資料庫檔案儲存在ANSI編碼頁。 

受dbfDefault的資料格式是什麼? 

Shapefile和資料庫檔案是唯一可以使用的資料格式dbfDefault設定指定內碼表。 其他資料格式,如保險和個人geodatabase,不受dbfDefault設定。 

在ArcGIS桌面(無論dbfDefault設定), 

▪個人geodatabases儲存在Unicode 
▪個人geodatabase表儲存在Unicode 
▪覆蓋儲存在ISO內碼表 
▪資訊檔案是儲存在ISO內碼表 
▪交換檔案儲存在ANSI編碼頁 
▪文字檔案儲存在ANSI編碼頁

過程

指令提供了描述如何設定dbfDefault值在系統登錄檔。 下面列出了兩種選擇。 

選擇一個 

1。 新增兩個鍵稱為“普通”和“內碼表”在系統登錄檔。 

警告:下面的說明包括更改您的作業系統的重要部分。
建議您備份您的作業系統和檔案,包括登錄檔,在繼續之前。 商量一個合格的計算機系統專業,如果必要的。 

Esri公司不能保證結果不正確的修改而遵循這些指令;因此,使用謹慎和繼續在你的自己的風險。

新增一個關鍵: 

開啟登錄檔編輯器: 
點選開始>執行,輸入“登錄檔編輯器”,然後單擊OK。 

b。在登錄檔中樹(在註冊視窗的左窗格),去我的電腦軟體\ \ HKEY_CURRENT_USER \ ESRI公司的,然後點選登錄檔鍵,“桌面10. x”。 (版本裝置上裝和早期版本,去“我的電腦軟體\
HKEY_CURRENT_USER \”,並點選登錄檔鍵ESRI公司。) 

c。新增一個新的金鑰稱為“普通”(在編輯選單: 
導航到新的選擇鍵,型別名稱“常見”,按回車)。 

d。點選剛剛建立的登錄檔鍵(常見),並新增一個新的金鑰稱為“內碼表”。

2。 新增一個新的字串值,dbfDefault,內碼表的關鍵。 

新增一個字串值: 

點選關鍵內碼表。 
b。在“編輯”選單上,導航到新的,並選擇“字串值”。 
c。型別“dbfDefault”為新值,並按下ENTER。 

新內碼表的關鍵應該是這樣的: 

[O-Image] Screenshot of dbfDefault in 

3。 輸入一個內碼表值。

。選擇剛新增的條目,重要的是,選擇dbfDefault而不是(預設)。 
b。在“編輯”選單上,單擊修改。 
c。在價值資料,輸入新內碼表值,並單擊OK。 

下面列出的內碼表支援識別符號(這些不是大小寫敏感)。 

OEM內碼表識別符號 
437年美國 
708 -阿拉伯語(ASMO 708) 
720 -阿拉伯語(透明ASMO)、阿拉伯語(DOS) 
737 -希臘,希臘(DOS) 
775 -波羅的海,波羅的海(DOS) 
850 -多語言拉丁語1、西歐(DOS) 
852 -拉丁2,中歐(DOS) 
855 -斯拉夫字母 
857 -土耳其,土耳其(DOS) 
860 -葡萄牙,葡萄牙(DOS) 
861 -冰島,冰島(DOS) 
862 -希伯來語,希伯來語(DOS) 
863 -法國加拿大法裔加拿大人(DOS) 
864 -阿拉伯語,阿拉伯語(864) 
865 -北歐北歐(DOS) 
866 -俄羅斯,西里爾(DOS) 
869 -現代希臘語,現代希臘(DOS) 
932年日本,日本(shift – jis) 
936 -中文(簡體):中華人民共和國,新加坡 
949年韓國(統一韓語程式碼) 
950年的今天,中國傳統:臺灣、香港、中華人民共和國 
ALARABI——將內碼表設定為448 

ANSI編碼頁識別符號 
1250年中歐 
1251 -斯拉夫字母 
1252年西歐 
1253 -希臘 
1254年土耳其 
1255 -希伯來語 
1256 -阿拉伯語 
1257 -波羅的海的語言 
1258年越南 
Big5 -中國:臺灣、香港、澳門 
SJIS-日本(內碼表設定為932) 

ISO內碼表識別符號 
88591 -拉丁1:西歐 
88592 -拉丁2:中歐和東歐 
88593 -拉丁3:歐洲南部 
88594 -拉丁4:北歐 
88595 -斯拉夫字母 
88596 -阿拉伯語 
88597 -希臘 
88598 -希伯來語 
88599 -拉丁5:土耳其 
885910 -拉丁6:北歐 
885911 -泰國 
885913 -立陶宛 
885915 -拉丁9:西歐(升級從拉丁語1) 

Unicode值 
utf – 8內碼表設定為65001 
use UTF8,內碼表設定為65001 

shapefile現在可以儲存在utf
– 8。 然而,shapefile用utf – 8編碼只承認在ArcGIS桌面。

選項B 

另外,使用以下批處理檔案來修改Windows登錄檔。 

ChangeCodePage.bat
@ECHO OFF
IF "%1"=="" GOTO :EOF 
reg add HKEY_CURRENT_USER\Software\ESRI\Desktop10.3\Common\CodePage /v dbfDefault /t REG_SZ /d %1 /f

執行批處理檔案,輸入下面的線。 

ChangeCodePage SJIS