Talking about character encoding in a Windows program

xiaoxiao2021-03-18  229

Talking about character encoding in a Windows program

The cause of writing this article is such a problem: When we use and install the Windows program, sometimes you will see a folder called "2052", "1033", which seems to be related to the character set, but they What does it mean?

At the same time, it will encounter other problems while studying this problem. We will talk about Windows internal architecture, Win32 API A / W function, local, ANSI code page, compilation parameters related to character encoding, MBCS, and Unicode programs, resources, and garbled, experience this trivial detail, between or Fun embellished journey.

0 WHERE IS WIN32 API

The Windows program has a user state and a core state. In the 32-bit address space, 0x80000000 is below a user state, and 0x80000000 or more belongs to a core state. All hardware management is at a core state. The user state program cannot directly use any code of the core state. The so-called core state is actually just a protective mode of the CPU. On the X86 CPU, the user state is in Ring 3, and the core state is in Ring 0.

The most common way to enter the core state from a user state is to fill in a function code in the register EAX, then execute INT 2E. This is a bit like DOS and BIOS system calls in the DOS era. This mechanism in the NT architecture is referred to as System Service.

There are two guys in the core state to provide System Service: ntoskrnl.exe and Win32k.sys. Ntoskrnl.exe is the brain of Windows, and its upper layer is called Executive, and the lower layer is called Kernel. Win32k.sys offers the SYSTEM Service with the display.

On the side of the user, there is an important role called NTDLL.DLL, most System Service is called. It encapsulates these System Service and then provides an API interface. This interface is called the Native API. The Native API users are subsystems, including Win32 subsystems, OS / 2 subsystems, POSIX subsystems. Each subsystem provides a running platform for Win32, OS2, and POSIX programs.

NTDLL.DLL is considered to be a nt system of native interface due to a platform-independent API interface, which is obtained by "Native API". In fact, its main job is to transfer calls to the core state.

Win32, OS / 2, POSIX, it sounds huge. In fact, only Win32 subsystems are really good. OS2, POSIX is all Console UI, ie there is only a character interface. The OS / 2 subsystem is provided. Just because in 1988, NT's main design goal is compatible with OS / 2, and later because Windows 3.0 is selling well, the design goal is changed to compatible with Windows. Providing a POSIX subsystem is to cope with a standard of US government's number FIPS 151-2.

The administrator of the Win32 subsystem is a brother called CSRSS.exe, its full name is: Client / Server Run-Time Subsystem. When I just gotten, I had to take all subsystems, but then POSIX and OS / 2 were handled separately, so only one Win32 was taken. Even this is very different, all Win32 procedures, threads must register it.

However, Win32 procedures is used or the Win32 subsystem DLL, the core DLL includes: kernel32.dll, user32.dll, gdi32.dll, advapi32.dll. These DLLs are packaged NTDLL.DLL Native API. Where GDI32.DLL is relatively special, it maintains contact with the core state Win32k.sys to improve the graphics processing capability of the NT system. The interface functions provided by the DLL of the Win32 subsystem are described in detail in the MSDN documentation, which is Win32 API. Appendix 0 startup

After the computer is powered, the ROM of the BIOS starts running. BIOS reads the data of the first sector of the hard disk to memory after doing some initialization, then handed over the control, which is called Master Boot Record (MBR).

The MBR includes a primary partition table for startup code and hard drive. This startup code scans the main partition table, find the first partition that can be started, and then read the first sector of this partition into memory and run. This sector is referred to as a boot sector.

The code of the boot sector has the ability to read the root of the file system, apparent different file systems require different code. The boot sector will read a file called NTLDR from the root directory. As the name suggests, this file is the main role of LOAD NT. Its performance mainly includes transferring the CPU to the protected mode, start the paging mechanism, and process Boot.ini.

If there is a sentence in Boot.ini:

C: /Bootsect.rH= "Red Hat Linux"

The content of bootsect.RH is Linux guiding sector, and users have chosen "Red Hat Linux", and NTLDR will perform Linux boot sector and start Linux boot. If the user chooses to continue using Windows, NTLDR will load and run the ntoskrnl.exe mentioned earlier.

Ntoskrnl.exe will start the session manager smss.exe. SMSS.exe launches CSRSS.EXE and Winlogon.exe. SMSS.exe will always wait for CSRSS.EXE and Winlogon.exe to return. If one of the two is abnormal, it will cause the system to crash. So the viruses often use the attack of CSRSS.exe.

Winlogon.exe is responsible for user login, after completing the login, it starts the registry HKLM / Software / Microsoft / Windows NT / Current Version / Winlogon User User Specifies the program. The default data of this value is Userinit.exe. Userinit.exe will load personal settings, let the hard drive kept non-stop, and test our tolerance, and finally launch the program specified by the SHELL value under the registry. The default data of this value is Explorer.exe. After Explorer.exe runs, we will see the familiar start menu and desktop.

1 Win32 API A / W function

To understand which APIs are provided by the DLL of the Win32 subsystem, the most direct way is to use Win32DSM to view DLL export tables. At this time we will find that the API with strings in Win32 APIs generally have two versions, such as CREATEFILEA and CREATEFILEW. Of course there is also an exception, such as a getProcAddress function.

A represents the ANSI code page, W is wide character, ie Unicode characters. Unicode characters in Windows generally refer to UCS2 UTF16-Le encoding. Let us observe the relationship between A / W versions through several instances.

Example 1: View the assembly code of GDI32.DLL with Win32DSM, you can see TextOuta call GDiGetCodePage Get the current code page, then call MultibyToWideChar to convert the input string, then call an internal function. The TextOutw calls this internal function directly. Example 2: Tracking a program using a CreateFilea with a debugger, you can see that CREATEFILEA calls CreateFilew after converting the input string into Unicode. Suppose the input file name is "test.txt", the corresponding data is: "B2 E2 CA D4 2E 74 78 74 00". In the debugger, you can see that the file name data transmitted to CreateFilew is: "4B 6D D5 8B 2E 00 74 00 78 00 74 00 00". This is the "test.txt" corresponding to the Unicdoe string. CreateFileW will then call NTCReateFile in NTDLL.DLL. By the way, see NtcreateFile code: MOV EAX, 00000020le EDX, DWORD PTR [ESP 04] INT External 002c Meet this Native API just simply calls the 0x20 SYSTEM Service provided by the core state.

Example 3: The getGlyphoutLine function in GDI32.DLL can get the word model of the specified character. GetglyphoutLinea and getGlyphoutLinew functions call the same internal function (recordable f). The function f will call the 0x10b1 system service via INT 2E before returning. GETGLYPHOUTLINEW directly calls the function F. GETGLYPHOUTLINEA Before calling the function F, GDiGETCODEPAGE, ISDBCSLEADBYTEEX and MULTIBYTOWIDECHAR are called, and convert the character encoding of the current code page into Unicode encoding. If we call GETGLYPHOUTLINEA, it is incoming "Baba", which is the "Han" word GBK code, with the debugger can see the character encoding of the transmitted function F is "6C49", which is a Unicode encoding of the "Han" word.

As can be seen from the above example, the A version will always convert the input string to the Unicode string in somewhere, and then execute the same code as the W version. Let us first explain the Locale and ANSI code pages before the MBCS program and Unicode programs are drawn by the A / W version API.

2 Locale and ANSI code pages

2.1 Locale and LCID

Locale means a set of settings specific to a country or region, including character sets, numbers, currency, time, and date formats. In Windows, each Locale can be represented by a 32-bit number to record the LCID. The composition of the LCID can be seen in Winnt.h. Its high 16-bit represents the sorting method of characters, generally 0. In its low 16 bits, the low 10 bits are the ID of Primary Language, and 4-bit specified SUBLANGUAGE. SUBLANGUAGE is used to distinguish between different codes of the same language. Below is a constant definition of some primary language and SUBLANGUAGE:

#define lang_chinese 0x04 # define lang_english 0x09 # define lang_french 0x0c # define lang_german 0x07

#define SUBLANG_CHINESE_TRADITIONAL 0x01 // Chinese (Taiwan Region) #define SUBLANG_CHINESE_SIMPLIFIED 0x02 // Chinese (PR China) #define SUBLANG_ENGLISH_US 0x01 // English (USA) #define SUBLANG_ENGLISH_UK 0x02 // English (UK) OK, now we can calculate Simplified Chinese LCID, shift the constant of Sublanguage to the left, taking 1024, plus the primary language constant: 2 * 1024 4 = 2052, 16) is 0804. US English is: 1 * 1024 9 = 1033, 16. It is 0409. . Traditional Chinese is 1 * 1024 4 = 1028, 16. It is 0404.

2.2 Code Page

Each Locale is connected to a lot of information and can be read through the getLocalInfo function. The most important information is the character set, that is, the language of language text corresponding to LOCALE. Windows calls the character set as the code page.

Each Locale can correspond to an ANSI code page and an OEM code page. Win32 API uses the ANSI code page, the underlying device uses an OEM code page, and both can map each other.

For example, the ANSI and OEM code pages of ENGLISH (US) are "1252 (ANSI-Latin I)" and "OEM - United States". The ANSI and OEM code pages of Chinese (PRC) are "ANSI / OEM - SIMPLIPLIED Chinese GBK". The CHINESE (TW) ANSI and OEM code pages are "ANSI / OEM - TRADITIONAL China BIG5".

There is a long table in Appendix 1. Some information about the 135 Locale supported by the Windows I am using, including LCID, Country Name, Language Name, Language Abbreviation, and the corresponding ANSI code page.

2.3 System LOCALE, User Locale, talk about ANSI code page

In Windows, Locale can be set separately for the system and users by the control panel. System Locale determines the code page, user locale determines the format of numbers, currencies, time, and date. This is not a good design, and there is a problem that it brings to it.

Use the getSystemDefaultlcid function and the getUserDefaultLCID function to get the system and user's LCID. There are many materials confused these two functions and two other functions: getSystemdefaultuilanguage and GetUserDefaultuilanguage.

GetSystemDefaultuilanguage and GetUserDefaultuilanguage get the language of the UI resource for your current use of Windows.

The code page for the user program default is the current system locale's ANSI code page, which can be called ansi encoding, which is a version of Win32 API default character encoding. For a text file that is not specified encoding, Windows explains according to the ANSI coding.

2.4 Applocale

If a text file is encoded using BIG5, the current ANSI code page is GBK. Open this file, you will display garbled. For example, "Chinese" is encoded in BIG5 is A4A4, A4E5, which is "ゅ" in the GBK in GBK. This is two pacific names in Japanese.

There is an AppLocale program in the Windows XP platform that can run non-Unicode programs in the specified language. Take a look with Win32DSM, in fact it just sets two environment variables before running the program. We can use a batch of files to imitate: @echo offset __compat_layer = # ApplicationLocaleSet ApplocaleId = 0404Start Notepad.exe

In the Simplified Chinese platform, the notepad that starts with this batch file can correctly display the BIG5 encoded text file. What is the text file with it opens the GBK encoded? "Chinese" will be displayed as "笢恅". Setting these two environment variables work on the current process and its sub-process. This method does not support the Windows 2000 platform.

3 MBCS program and Unicode program

3.1 Compile parameters related to character coding

Let's go back to Win32 API. We don't have a A / W suffix in the process of WIN32 API, and Windows's header file will replace the function name that has no suffix in the A version or W version according to the compilation parameter Unicode, for example:

#ifdef unicode # define createfile createfilew # Else # define createfile createfilea # ENDIF

The C Runtime library (CRT) uses _unicode and _mbcs to distinguish three sets of string handlers, separately for SBCS, MBCS, and Unicdoe strings. SBCS and MBCs refer to single byte strings and multi-byte strings, respectively. For example, the three versions of _TCSCLEN are Strlen, _mbslen, and WCSLEN, guess the following functions return a few?

Strlen ("VoIP Gateway"); _ MBSLEN ((UNSIGNed Char *) "VoIP Gateway"); WCSLEN (L "VoIP Gateway");

The answer is 8, 6, 6. L "ANSI String" Notification The compiler converts the ANSI string into a Unicode string, which is a small dessert provided by the VC compiler. However, we should use the macro: _t ("ANSI string"). _T macro only converts when we define _unicode. So the same code can compile the MBCS version or compile the Unicode version.

The MFC uses the _unicode parameter to distinguish the Unicode version unique code, decide what version of the import library or static library is used.

3.2 Unicode program, MBCS program and multilingual support

The Unicode program uses the Unicode version of the CRT and Win32 API. The running of the Unicode program does not have a relationship with the current ANSI code page. The operation of the MBCS program depends on the ANSI code page. If the designer and user use a different code page, there may be garbled. Most of Microsoft's development procedures are Unicode programs, regardless of how we transform the system locale, they can always operate.

Delphi programs using the VCL class library are MBCS programs. The VCL framework calls GetThreadLocale to get GetThreadLocale to get the LCID of the current user, then find the corresponding resource file in the current directory, the naming rule is: program name '.' Language abbreviation, language abbreviation can be found in Appendix 1. The resources in the exe file are not found. However, if the system LCID is English (United States), the user LCID is Chinese (PRC), and there is garbled when the program generated by the VCL. Readers can analyze the reasons themselves.

Multi-language versions for the VCL program. Just use the Resource DLL Wizard with Delphi to make a specific language resource DLL, the original program is not changed. However, many programmers use other components to make multilingual versions, such as Tsilang.

Although the MBCS program can also make multiple language versions, it cannot display different code pages unique characters at the same time. At this time, you must use the Unicode program. An example of a multilingual resource in the vs.net document: Satdll. It only uses the Win32 API example, but uses a VC7 project. I changed it into a VC6 project when I learned it, and corrected two questions: 1. Reading with GetUserDefaultuilanguage is the Windows resource version, not the code page set by the current user. 2. There is no use of the menu in the resource dll when starting.

You can download modified SATDLL on my personal home page (http://fmddlmyy.home4u.china.com). This program describes the basic ideas that support multi-language resources: putting different language resources in different DLLs, and loads the corresponding resource DLL according to the current Locale when the program starts. Dynamically switch resources if necessary. In order to mark resources in different languages, they can be placed in different directories, as the directory name, such as "2052", "1033". Of course, we can also contact LCID and Resource DLL with other methods.

The MFC program can set the resource DLL with the AFXSetResourceHandle function in the INITINSTANCE function of the APP class. The dynamic switching resource in Delphi can refer to the reinit.pas of the Delphi Demo directory Richedit project. When reading the current setting, it is recommended to use the getSystemDefaultLCID function because the system locale determines the ANSI code page.

3.4 Resources and garbled

By checking the executable, we can determine that VC and Delphi resource compilers save characters resources in Unicode. When editing resources in a VC environment, we specify the code page for the resource. The compiler converts it to Unicode according to the resource code page.

The Unicode program uses resources saved in Unicode encoding. The MBCS program needs to convert Unicode resources back to the current ANSI code page and then use. If the Unicode string in the resource cannot map characters in the current code page, it will appear?

For example, Windows standard dialogs will also be garbled. Suppose we use the Simplified Chinese Windows, current Locale is Chinese (TW), our program is MBCS, using standard Open File dialog box. Because there is no "open" word in BIG5, "Open" will be displayed as "hit". By compiling the program into a Unicode version, you can avoid this problem.

If the character is not saved in the resource, it is hardcoded in the program. Then developers and users use different code pages, which will cause garbled. Assuming that the developer's Locale is Chinese (PRC), the user's locale is English (US), and the program "file" is hardly encoded in the program. The ANSI code page of Chinese (PRC) is GBK, "File" encoding "CE C4 BC Fe". ENGLISH (US) ANSI code page is Latin i, and the user explains "CE C4 BC Fe" according to the Latin i code.

A questions I have answered the question: The Delphi program converts the string in the resource based on the user LCID. If the user's LCID is Chinese (PRC), the system LCID is ENGLISH (US). Then the Unicode string in the resource will be converted to GBK encoding, then follow Latin I, then we see that "îä1/1" stuff is not ??.

Since the resource is saved in Unicode, if the MBCS program does not convert it to the ANSI code page, it will not produce garbled. For example, in Chinese in the MFC program menu, the LOCALE of English (US) can also be displayed normally. However, depending on the specific implementation of each part of the code, the Chinese in the Menu Bar control is all displayed in the English (US) Locale. Further reference

The sections 0 and Appendix 0 of this article mainly refer to "Inside Windows 2000 Third Edition", the book of the book is available in China. There is a large number of Windows kernels in the DDK document. Viewing the Windows system file with Win32DSM and various debuggers to get more direct information.

Character encoding about the Window program, the best reference is the source file of the SDK, such as Winnt.h, etc., VCL, MFC, and CRT. We don't need to read them, as long as you find the information you are interested, you can use Source Insight.

What is not talking about this article is not something wrong, but some other programmers are set, so we need to know some details because we need to use their procedures. The methods and interests of research issues are always more important than the problem itself, such as a sentence of Latin: Res, Non Verba, is essential to the text.

end

"Although there is a round lack, after all, it is eternal, life is like an eye, I don't want to go back, I really don't know what it is?"

"The frog sound is short, but it is a lively Zen machine in Wan Yi, but also to say that the ancient ruins, eternal, helpless, can you have?"

This is a dialogue in the martial arts book. In the long river of time, life is like a frog. Speaking of the frog, my 20-month little baby after drinking soup, it will be slightly brewed, it will close the mouth, send out the sound like a frog. We will tease him: "The little frog is coming again." The little guy is proud, regardless of my protest, and the small chin, the soup, oil, is intimate on me.

Appendix 1 Some information about LCID

Use the EnumsystemLocales function to enumerate the LCID supported by the system. Use getLocaleInfo to get the ID of the ANSI code page, and then get a full name of the code page via getCPinfoEx. The following is what I read on Chinese Windows XP.

LCID Country or Region Language Language Abbreviation ANSI Code Page 1025 Saudi Arabia Arabic (Saudi Arabia) ARA 1256 (Ansi - Arabic) 1026 Bulgaria Bulin BGR 1251 (ANSI - Cyarlin) 1027 Spain Cahetong Cat 1252 (ANSI - Latin I) 1028 Taiwan Chinese (Taiwan) CHT 950 (ANSI / OEM - Traditional Chinese Big5) 1029 Czech Republic Csy 1250 (ANSI - Central Europe) 1030 Danish Dan Dan 1252 (ANSI - Latin I) 1031 German German Germany ( Germany) DEU 1252 (ANSI - Latin I) 1032 Greek Greek Ell 1253 (ANSI - Greek) 1033 US English (US) ENU 1252 (ANSI - Latin I) 1034 Spain Spanish (Traditional) ESP 1252 (ANSI - Latin i) 1035 Finnish Finnish FIN 1252 (ANSI - Latin I) 1036 French French (France) FRA 1252 (ANSI - Latin I) 1037 Israel Hebrew Heb 1255 (Ansi - Hebrew) 1038 Hungary Hungarian Hun 1250 (ANSI - Central Europe) 1039 Iceland Iceland ISL 1252 (ANSI - Latin I) 1040 Italian Italian (Italy) ITA 1252 (ANSI - Latin I) 1041 Japanese Japanese JPN 932 (ANSI / OEM - Japanese Shift -JIS 1042 North Korean Korean Kor 949 (ANSI / OEM - Korean) 1043 Netherlands Dutch (Netherlands) NLD 1252 (ANSI - Latin I) 1044 Norwegian Norwegian NOR 1252 (Ansi - Latin I 1045 Poland Polish PLK 1250 (ANSI - Central Europe) 1046 Brazil Portuguese (Brazil) P TB 1252 (ANSI - Latin i) 1048 Romania Romanian ROM 1250 (ANSI - Central Europe) 1049 Russian Russian Rus 1251 (ANSI - CRELES) 1050 Croatia Croatian HRV 1250 (ANSI - Central Europe) 1051 Slovak Slovak Sky 1250 (ANSI - Central Europe) 1052 Albania Albanian SQI 1250 (ANSI - Central Europe) 1053 Sweden SVE 1252 (ANSI - Latin I) 1054 Thai THA 874 (ANSI / OEM - Thai) 1055 Turkey Turkish TRK 1254 (ANSI - Turkish) 1056 Pakistan Islamic Republic of Urd 1256 (ANSI - Arabic) 1057 Indonesia Indonesian Indonesian Ind 1252 (ANSI - Latin I) 1058 Ukraine Ukrainian UKR 1251 (ANSI - Cyrievin) 1059 Belgium Belgi Bel 1251 (ANSI - CRELES) 1060 Slovenia Slovenian SLV 1250 (ANSI - Central Europe) 1061 Estonia Estonian ETI 1257 (ANSI - Baltic Hewen) 1062 Latvia Latvia Lvi 1257 (ANSI - Baltic Hewen) 1063 Lithuanian Lithuanian LTH 1257 (Ansi) - Baltic Hewen) 1065 Iran Fas

R 1256 (ANSI - Arabic) 1066 Vietnamese Vietnamese VIT 1258 (ANSI / OEM - Vietnam) 1067 Armenia Armenian HYE 936 (ANSI / OEM - Simplified Chinese GBK) 1068 Azerbaijan Azerbaijan (Latin) Aze 1254 (Ansi - Turkey Wen) 1069 Spain Euq 1252 (ANSI - Latin I) 1071 Former Yugoslav Macedonia Macedonia (FYROM) MKI 1251 (ANSI - Cyril Wen) 1078 South Africa South Africa AFK 1252 (Ansi - Latin I) 1079 Georgia Georgian Kat 936 (ANSI / OEM - Simplified Chinese GBK) 1080 Faro Islands FOOS 1252 (ANSI - Latin I) 1081 Indian Indian Hin 936 (ANSI / OEM - Simplified Chinese GBK) 1086 Malaysia Malay (Malaysia) MSL 1252 (ANSI - Latin I) 1087 KKZ 1251 KKZ 1251 (ANSI - Cyrrien) 1088 Kyrgyzstanji (Silver) KYR 1251 (Ansi - Cyrrien) 1089 Kenia Swah LISI SWK 1252 (ANSI - Latin I) 1091 Uzbekistan Uzbek (Latin) UZB 1254 (ANSI - Turkish) 1092 Tatarst Tattan TTT 1251 (ANSI - Cyril Wen) 1094 India Punjar Pan 936 (ANSI / OEM - 简体 中文 GBK) 1095 Indian Gujarat Guj 936 (ANSI / OEM - Simplified Chinese GBK) 1097 Indian Tamil Tam 936 (ANSI / OEM - Simplified Chinese GBK) 1098 India Teloo Tel 936 (ANSI / OEM - Simplified Chinese GBK) 1099 India Kanala language Kan 936 (ANSI / OEM - Simplified Chinese GBK) 1102 Indian Malawa MAR 936 (ANSI / OEM - Simplified Chinese GBK) 1103 Indian Sanskrit SAN 936 (ANSI / OEM - Simplified Chinese GBK) 1104 Mongolian Mongolian (Silver) Mon 1251 (ANSI - Cyrrien) 1110 Garrican Glc 1252 (ANSI - Latin I) 1111 Indian Kongkarni Knk 936 (ANSI / OEM - Simplified Chinese GBK) 1114 Syrian Syrian Syr 936 (ANSI / OEM - Simplified Chinese GBK) 1125 Maldives Villa Div 936 (ANSI / OEM - Simplified Chinese GBK) 2049 Iraq Arabic (Iraq) Ari 1256 (Ansi - Arabic) 2052 People's Republic of China (China) CHS 936 (ANSI / OEM - Simplified Chinese GBK) 2055 Switzerman ( Switzerland) Des 1252 (ANSI - Latin i) 2057 English (UK) ENG 1252 (ANSI - Latin I) 2058 Mexico Spanish (Mexico) ESM 1252 (ANSI - Latin I) 2060 Belgium French (Belgium) FRB 1252 (ANSI - Latin I) 2064 Swiss Italian (Switzerland) ITS 1252 (ANSI - Latin I) 2067 Belgium Dutch (Belgium) NLB 1252 (ANSI - Latin I) 2068 Norwegian Norwegian (NiñoSk)

Non 1252 (ANSI - Latin i) 2070 Portuguese Portuguese (Portugal) PTG 1252 (ANSI - Latin I) 2074 Serbia Serbian (Latin) SRL 1250 (ANSI - Central Europe) 2077 Finland Swedish (Finland) SVF 1252 ANSI - Latin I) 2092 Azerbaijan Azerbaijan (Silvern) Aze 1251 (ANSI - Cyrrien) 2110 Brunei Darussalan Malay (Brune Dururasa) MSB 1252 (ANSI - Latin I 2115 Uzbekistan Uzbek (Silver) UZB 1251 (ANSI - Cyrrien) 3073 Egypt Arabic (Egypt) Are 1256 (Ansi - Arabic) 3076 Hong Kong Special Administrative Region Chinese (Hong Kong Special Administrative Region) ZHH 950 (ANSI / OEM - Traditional Chinese Big5) 3079 Austria German (Austria) DEA 1252 (ANSI - Latin I) 3081 Australian English (Australia) ENA 1252 (ANSI - Latin I) 3082 Spain Spanish (International) ESN 1252 (Ansi - Latin I) 3084 Canada French (Canada) FRC 1252 (ANSI - Latin i) 3098 Serbia Serbian (Silver) SRB 1251 (ANSI - Cyrrin) 4097 Libyan Arabic (Libya) ARL 1256 (Ansi - Arabic) 4100 Singapore (Singapore) zhi 936 (ANSI / OEM - Simplified Chinese GBK) 4103 Luxembourg German (Luxembourg) Del 1252 (ANSI - Latin I) 4105 Canadian English (Canada) ENC 1252 (ANSI - Latin I) 4106 Guatemala Spain Language (Guatemala) ESG 1252 (ANSI - Latin I) 4108 Switzerland French (Switzerland) FRS 1252 (ANSI - Latin I) 5121 Algeria Arabic (Algeria) arg 1256 (ANSI - Arabic) 5124 Macau Special Administrative Region Chinese (Macau Special Administrative Region) ZHM 950 (ANSI / OEM - Traditional Chinese Big5) 5127 Liechtenstead (Liechtenstein) Dec 1252 (Ansi - Latin I) 5129 New Zealand English (New Zealand) Enz 1252 (ANSI - Latin I) 5130 Costa Rica Spanish (Costa Rica) ESC 1252 (ANSI - Latin I) 5132 Luxembourg French (Luxembourg) FRL 1252 (ANSI - Latin I) 6145 Morocco Arabic (Morocco) ARM 1256 (ANSI - Arabic 6153 Ireland English (Ireland) ENI 1252 (ANSI - Latin i) 6154 Panama Spanish (Panama) ESA 1252 (ANSI - Latin I) 6156 Monaco French (Monaco) FRM 1252 (Ansi - Latin I) 7169 Tunisia Arabic (Tunisia) Art 1256 (ANSI - Arabic) 7177 South Africa English (South Africa) ENS 1252 (ANSI - Latin I) 7178 Dominican Republic Spanish (Dominican Republic) ESD 1252 (ANSI - Latin I) 8193 Oman Arabic (Oman) Aro 1256 (Ansi - Arabic) 8201 Jamaica English (Jamaica) ENJ 1252 (ANSI - Latin I) 8202 Venezuela Spanish (Venezuela) ESV 1

252 (ANSI - Latin I) 9217 Yemen Arabic (Yemen) ARY 1256 (ANSI - Arabic) 9225 Caribbean English (Caribbean) ENB 1252 (ANSI - Latin I) 9226 Colombia Spanish (Colombia) ESO 1252 ( ANSI - Latin I) 10241 Syria Arabic (Syria) ARS 1256 (ANSI - Arabic) 10249 Belize English (Belize) ENL 1252 (ANSI - Latin I) 10250 Peru Spanish (Peru) ESR 1252 (Ansi - Latin I) 11265 Jordan Arabic (Jordan) ARJ 1256 (ANSI - Arabic) 11273 Trinidad and Tobago English (Trinidad) Ent 1252 (Ansi - Latin I) 11274 Argentina Spanish (Argentina) ESS 1252 (ANSI - Latin i) 12289 Lebanon Arabic (Lebanon) ARB 1256 (ANSI - Arabic) 12297 Zimbabwe English (Zimbabwe) ENW 1252 (ANSI - Latin I) 12298 Ecuador Spanish (Ecuador) ESF 1252 (Ecuador) ESF 1252 ANSI - Latin I) 13313 Kuwait Arabic (Kuwait) ARK 1256 (ANSI - Arabic) 13321 Philippine Republic English (Philippines) Enp 1252 (ANSI - Latin I) 13322 Chile Spanish (Chile) ESL 1252 (ANSI - Latin) I) 14337 United Arab Emirates Arabic (United Arab Emirates) ARU 1256 (Ansi - Arabic) 14346 Uruguay Spanish (Uruguay) ESY 1252 (ANSI - Latin I) 15361 Bahrain Arabic (Bahrain) ARH 1256 (Ansi - Arabic) 15370 Paraguay Spanish (Paraguay) ESZ 1252 (ANSI - Latin I) 16385 Qatar Arabic (Qatar) ARQ 1256 (ANSI - Arabic) 16394 Bolivia Spanish (Bolivia) ESB 1252 (ANSI - Latin I) 17418 Salvador Spanish (Salvador) ESE 1252 (Ansi - Latin I) 18442 Honduras Spanish (Honduras) ESH 1252 (Ansi - Latin I 19466 Nicaragua Spanish (Nicaragua) ESI 1252 (ANSI - Latin I) 20490 Puerto Rico (US) Spanish (Puerto Rico) ESU 1252 (ANSI - Latin I) LCID depends on the language, listed countries in the table The name is just to increase interest. For example, you can see Israel is still using an old Hebrew. The French of "Hebrew" is Hébreu. This word has one meaning, "is" something that can't understand. "

转载请注明原文地址:https://www.9cbs.com/read-129952.html

New Post(0)