今天在研究chm的格式時,借用chmlib來研究,看到
typedef struct chmheader {
char itsf[4];
ulong version; /* CHMTools only deals with version 3 */
ulong tot_hdrlen; /* 0x60 in version 3 */
ulong unk3; /* always 0x01 */
ulong last_modified; /* format unknown */
ulong langid; /* usually 0x0409 (ENGLISH_US); I’ve seen 0x0407 (GERMAN_GERMAN) */
guid_t unk_guid1; /* 7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC */
guid_t unk_guid2; /* 7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC */
} chmheader;
我拿一些.chm檔來試,langid有0x040d的,跟說明不同,後來查到Locale IDs Assigned by Microsoft,看到040d是希伯來文ㄝ,看來這類的檔案,可能langid會亂掛,因為那個檔案的內容明明就是英文,不過我用的The_Scriptures.chm,很清楚就是0404就是Chinese – Taiwan,詳細表格資料轉貼於下,以供參考:
| Language – Country/Region | LCID Hex | LCID Dec |
| Afrikaans – South Africa | 0436 | 1078 |
| Albanian – Albania | 041c | 1052 |
| Amharic – Ethiopia | 045e | 1118 |
| Arabic – Saudi Arabia | 0401 | 1025 |
| Arabic – Algeria | 1401 | 5121 |
| Arabic – Bahrain | 3c01 | 15361 |
| Arabic – Egypt | 0c01 | 3073 |
| Arabic – Iraq | 0801 | 2049 |
| Arabic – Jordan | 2c01 | 11265 |
| Arabic – Kuwait | 3401 | 13313 |
| Arabic – Lebanon | 3001 | 12289 |
| Arabic – Libya | 1001 | 4097 |
| Arabic – Morocco | 1801 | 6145 |
| Arabic – Oman | 2001 | 8193 |
| Arabic – Qatar | 4001 | 16385 |
| Arabic – Syria | 2801 | 10241 |
| Arabic – Tunisia | 1c01 | 7169 |
| Arabic – U.A.E. | 3801 | 14337 |
| Arabic – Yemen | 2401 | 9217 |
| Armenian – Armenia | 042b | 1067 |
| Assamese | 044d | 1101 |
| Azeri (Cyrillic) | 082c | 2092 |
| Azeri (Latin) | 042c | 1068 |
| Basque | 042d | 1069 |
| Belarusian | 0423 | 1059 |
| Bengali (India) | 0445 | 1093 |
| Bengali (Bangladesh) | 0845 | 2117 |
| Bosnian (Bosnia/Herzegovina) | 141A | 5146 |
| Bulgarian | 0402 | 1026 |
| Burmese | 0455 | 1109 |
| Catalan | 0403 | 1027 |
| Cherokee – United States | 045c | 1116 |
| Chinese – People’s Republic of China | 0804 | 2052 |
| Chinese – Singapore | 1004 | 4100 |
| Chinese – Taiwan | 0404 | 1028 |
| Chinese – Hong Kong SAR | 0c04 | 3076 |
| Chinese – Macao SAR | 1404 | 5124 |
| Croatian | 041a | 1050 |
| Croatian (Bosnia/Herzegovina) | 101a | 4122 |
| Czech | 0405 | 1029 |
| Danish | 0406 | 1030 |
| Divehi | 0465 | 1125 |
| Dutch – Netherlands | 0413 | 1043 |
| Dutch – Belgium | 0813 | 2067 |
| Edo | 0466 | 1126 |
| English – United States | 0409 | 1033 |
| English – United Kingdom | 0809 | 2057 |
| English – Australia | 0c09 | 3081 |
| English – Belize | 2809 | 10249 |
| English – Canada | 1009 | 4105 |
| English – Caribbean | 2409 | 9225 |
| English – Hong Kong SAR | 3c09 | 15369 |
| English – India | 4009 | 16393 |
| English – Indonesia | 3809 | 14345 |
| English – Ireland | 1809 | 6153 |
| English – Jamaica | 2009 | 8201 |
| English – Malaysia | 4409 | 17417 |
| English – New Zealand | 1409 | 5129 |
| English – Philippines | 3409 | 13321 |
| English – Singapore | 4809 | 18441 |
| English – South Africa | 1c09 | 7177 |
| English – Trinidad | 2c09 | 11273 |
| English – Zimbabwe | 3009 | 12297 |
| Estonian | 0425 | 1061 |
| Faroese | 0438 | 1080 |
| Farsi | 0429 | 1065 |
| Filipino | 0464 | 1124 |
| Finnish | 040b | 1035 |
| French – France | 040c | 1036 |
| French – Belgium | 080c | 2060 |
| French – Cameroon | 2c0c | 11276 |
| French – Canada | 0c0c | 3084 |
| French – Democratic Rep. of Congo | 240c | 9228 |
| French – Cote d’Ivoire | 300c | 12300 |
| French – Haiti | 3c0c | 15372 |
| French – Luxembourg | 140c | 5132 |
| French – Mali | 340c | 13324 |
| French – Monaco | 180c | 6156 |
| French – Morocco | 380c | 14348 |
| French – North Africa | e40c | 58380 |
| French – Reunion | 200c | 8204 |
| French – Senegal | 280c | 10252 |
| French – Switzerland | 100c | 4108 |
| French – West Indies | 1c0c | 7180 |
| Frisian – Netherlands | 0462 | 1122 |
| Fulfulde – Nigeria | 0467 | 1127 |
| FYRO Macedonian | 042f | 1071 |
| Gaelic (Ireland) | 083c | 2108 |
| Gaelic (Scotland) | 043c | 1084 |
| Galician | 0456 | 1110 |
| Georgian | 0437 | 1079 |
| German – Germany | 0407 | 1031 |
| German – Austria | 0c07 | 3079 |
| German – Liechtenstein | 1407 | 5127 |
| German – Luxembourg | 1007 | 4103 |
| German – Switzerland | 0807 | 2055 |
| Greek | 0408 | 1032 |
| Guarani – Paraguay | 0474 | 1140 |
| Gujarati | 0447 | 1095 |
| Hausa – Nigeria | 0468 | 1128 |
| Hawaiian – United States | 0475 | 1141 |
| Hebrew | 040d | 1037 |
| Hindi | 0439 | 1081 |
| Hungarian | 040e | 1038 |
| Ibibio – Nigeria | 0469 | 1129 |
| Icelandic | 040f | 1039 |
| Igbo – Nigeria | 0470 | 1136 |
| Indonesian | 0421 | 1057 |
| Inuktitut | 045d | 1117 |
| Italian – Italy | 0410 | 1040 |
| Italian – Switzerland | 0810 | 2064 |
| Japanese | 0411 | 1041 |
| Kannada | 044b | 1099 |
| Kanuri – Nigeria | 0471 | 1137 |
| Kashmiri | 0860 | 2144 |
| Kashmiri (Arabic) | 0460 | 1120 |
| Kazakh | 043f | 1087 |
| Khmer | 0453 | 1107 |
| Konkani | 0457 | 1111 |
| Korean | 0412 | 1042 |
| Kyrgyz (Cyrillic) | 0440 | 1088 |
| Lao | 0454 | 1108 |
| Latin | 0476 | 1142 |
| Latvian | 0426 | 1062 |
| Lithuanian | 0427 | 1063 |
| Malay – Malaysia | 043e | 1086 |
| Malay – Brunei Darussalam | 083e | 2110 |
| Malayalam | 044c | 1100 |
| Maltese | 043a | 1082 |
| Manipuri | 0458 | 1112 |
| Maori – New Zealand | 0481 | 1153 |
| Marathi | 044e | 1102 |
| Mongolian (Cyrillic) | 0450 | 1104 |
| Mongolian (Mongolian) | 0850 | 2128 |
| Nepali | 0461 | 1121 |
| Nepali – India | 0861 | 2145 |
| Norwegian (Bokmål) | 0414 | 1044 |
| Norwegian (Nynorsk) | 0814 | 2068 |
| Oriya | 0448 | 1096 |
| Oromo | 0472 | 1138 |
| Papiamentu | 0479 | 1145 |
| Pashto | 0463 | 1123 |
| Polish | 0415 | 1045 |
| Portuguese – Brazil | 0416 | 1046 |
| Portuguese – Portugal | 0816 | 2070 |
| Punjabi | 0446 | 1094 |
| Punjabi (Pakistan) | 0846 | 2118 |
| Quecha – Bolivia | 046B | 1131 |
| Quecha – Ecuador | 086B | 2155 |
| Quecha – Peru | 0C6B | 3179 |
| Rhaeto-Romanic | 0417 | 1047 |
| Romanian | 0418 | 1048 |
| Romanian – Moldava | 0818 | 2072 |
| Russian | 0419 | 1049 |
| Russian – Moldava | 0819 | 2073 |
| Sami (Lappish) | 043b | 1083 |
| Sanskrit | 044f | 1103 |
| Sepedi | 046c | 1132 |
| Serbian (Cyrillic) | 0c1a | 3098 |
| Serbian (Latin) | 081a | 2074 |
| Sindhi – India | 0459 | 1113 |
| Sindhi – Pakistan | 0859 | 2137 |
| Sinhalese – Sri Lanka | 045b | 1115 |
| Slovak | 041b | 1051 |
| Slovenian | 0424 | 1060 |
| Somali | 0477 | 1143 |
| Sorbian | 042e | 1070 |
| Spanish – Spain (Modern Sort) | 0c0a | 3082 |
| Spanish – Spain (Traditional Sort) | 040a | 1034 |
| Spanish – Argentina | 2c0a | 11274 |
| Spanish – Bolivia | 400a | 16394 |
| Spanish – Chile | 340a | 13322 |
| Spanish – Colombia | 240a | 9226 |
| Spanish – Costa Rica | 140a | 5130 |
| Spanish – Dominican Republic | 1c0a | 7178 |
| Spanish – Ecuador | 300a | 12298 |
| Spanish – El Salvador | 440a | 17418 |
| Spanish – Guatemala | 100a | 4106 |
| Spanish – Honduras | 480a | 18442 |
| Spanish – Latin America | 580a | 58378 |
| Spanish – Mexico | 080a | 2058 |
| Spanish – Nicaragua | 4c0a | 19466 |
| Spanish – Panama | 180a | 6154 |
| Spanish – Paraguay | 3c0a | 15370 |
| Spanish – Peru | 280a | 10250 |
| Spanish – Puerto Rico | 500a | 20490 |
| Spanish – United States | 540a | 21514 |
| Spanish – Uruguay | 380a | 14346 |
| Spanish – Venezuela | 200a | 8202 |
| Sutu | 0430 | 1072 |
| Swahili | 0441 | 1089 |
| Swedish | 041d | 1053 |
| Swedish – Finland | 081d | 2077 |
| Syriac | 045a | 1114 |
| Tajik | 0428 | 1064 |
| Tamazight (Arabic) | 045f | 1119 |
| Tamazight (Latin) | 085f | 2143 |
| Tamil | 0449 | 1097 |
| Tatar | 0444 | 1092 |
| Telugu | 044a | 1098 |
| Thai | 041e | 1054 |
| Tibetan – Bhutan | 0851 | 2129 |
| Tibetan – People’s Republic of China | 0451 | 1105 |
| Tigrigna – Eritrea | 0873 | 2163 |
| Tigrigna – Ethiopia | 0473 | 1139 |
| Tsonga | 0431 | 1073 |
| Tswana | 0432 | 1074 |
| Turkish | 041f | 1055 |
| Turkmen | 0442 | 1090 |
| Uighur – China | 0480 | 1152 |
| Ukrainian | 0422 | 1058 |
| Urdu | 0420 | 1056 |
| Urdu – India | 0820 | 2080 |
| Uzbek (Cyrillic) | 0843 | 2115 |
| Uzbek (Latin) | 0443 | 1091 |
| Venda | 0433 | 1075 |
| Vietnamese | 042a | 1066 |
| Welsh | 0452 | 1106 |
| Xhosa | 0434 | 1076 |
| Yi | 0478 | 1144 |
| Yiddish | 043d | 1085 |
| Yoruba | 046a | 1130 |
| Zulu | 0435 | 1077 |
| HID (Human Interface Device) | 04ff | 1279 |