📄 nls.cpp
字号:
// nls.cpp
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include "msc.h"
#include "codepage.h"
#include "nls.h"
//////////////////////////////
// 暥帤僙僢僩 //
//////////////////////////////
// 暥帤僙僢僩偐傜僐乕僪儁乕僕傪曉偡
int CharsetToCodePage ( int nCharset ) {
int nCodePage ;
switch ( nCharset ) {
case ANSI_CHARSET : nCodePage = CP_ANSI_EUROPEAN ; break ;
case SHIFTJIS_CHARSET : nCodePage = CP_JAPANESE ; break ;
case HANGUL_CHARSET : nCodePage = CP_KOREAN ; break ;
case GB2312_CHARSET : nCodePage = CP_CHINESE_SIMPLIFIED ; break ;
case CHINESEBIG5_CHARSET : nCodePage = CP_CHINESE_TRADITIONAL ; break ;
case GREEK_CHARSET : nCodePage = CP_ANSI_GREEK ; break ;
case TURKISH_CHARSET : nCodePage = CP_ANSI_TURKISH ; break ;
case VIETNAMESE_CHARSET : nCodePage = CP_ANSI_VIETNAMESE ; break ;
case HEBREW_CHARSET : nCodePage = CP_ANSI_HEBREW ; break ;
case ARABIC_CHARSET : nCodePage = CP_ANSI_ARABIC ; break ;
case BALTIC_CHARSET : nCodePage = CP_ANSI_BALTIC ; break ;
case RUSSIAN_CHARSET : nCodePage = CP_ANSI_CYRILLIC ; break ;
case THAI_CHARSET : nCodePage = CP_THAI ; break ;
case EASTEUROPE_CHARSET : nCodePage = CP_ANSI_CENTRAL_EUROPEAN ; break ;
case SYMBOL_CHARSET : nCodePage = CP_SYMBOL ; break ;
case JOHAB_CHARSET : nCodePage = CP_KOREAN_JOHAB ; break ;
case MAC_CHARSET : nCodePage = CP_MAC_EUROPEAN ; break ;
case OEM_CHARSET : nCodePage = CP_US ; break ;
default : nCodePage = CP_ANSI_EUROPEAN ; break ;
}
return nCodePage ;
}
// 僐乕僪儁乕僕偐傜暥帤僙僢僩傪曉偡
int CodePageToCharset ( int nCodePage ) {
int nCharset ;
switch ( nCodePage ) {
case CP_ANSI_EUROPEAN : nCharset = ANSI_CHARSET ; break ;
case CP_JAPANESE : nCharset = SHIFTJIS_CHARSET ; break ;
case CP_KOREAN : nCharset = HANGUL_CHARSET ; break ;
case CP_CHINESE_SIMPLIFIED : nCharset = GB2312_CHARSET ; break ;
case CP_CHINESE_TRADITIONAL : nCharset = CHINESEBIG5_CHARSET ; break ;
case CP_ANSI_GREEK : nCharset = GREEK_CHARSET ; break ;
case CP_ANSI_TURKISH : nCharset = TURKISH_CHARSET ; break ;
case CP_ANSI_VIETNAMESE : nCharset = VIETNAMESE_CHARSET ; break ;
case CP_ANSI_HEBREW : nCharset = HEBREW_CHARSET ; break ;
case CP_ANSI_ARABIC : nCharset = ARABIC_CHARSET ; break ;
case CP_ANSI_BALTIC : nCharset = BALTIC_CHARSET ; break ;
case CP_ANSI_CYRILLIC : nCharset = RUSSIAN_CHARSET ; break ;
case CP_THAI : nCharset = THAI_CHARSET ; break ;
case CP_ANSI_CENTRAL_EUROPEAN : nCharset = EASTEUROPE_CHARSET ; break ;
case CP_SYMBOL : nCharset = SYMBOL_CHARSET ; break ;
case CP_KOREAN_JOHAB : nCharset = JOHAB_CHARSET ; break ;
case CP_MAC_EUROPEAN : nCharset = MAC_CHARSET ; break ;
case CP_US : nCharset = OEM_CHARSET ; break ;
default : nCharset = ANSI_CHARSET ; break ;
}
return nCharset ;
}
// 暥帤僙僢僩偑儅儖僠僶僀僩偐偳偆偐
int IsMultiByteCharset ( int nCharset ) {
int nResult ;
switch ( nCharset ) {
case SHIFTJIS_CHARSET :
case HANGUL_CHARSET :
case GB2312_CHARSET :
case CHINESEBIG5_CHARSET :
case JOHAB_CHARSET :
nResult = 1 ; break ;
default :
nResult = 0 ; break ;
}
return nResult ;
}
//////////////////////////////
// 僐乕僪儁乕僕 //
//////////////////////////////
// 儌乕僪偺偁傞僐乕僪儁乕僕偐傜 Windows 婎杮僐乕僪儁乕僕傪曉偡
// UTF8/16/32 傪巜掕偡傞偲 CP_UTF16 傪曉偡
int GetModelessCodePage ( int nCodePage ) {
int nResult ;
switch ( nCodePage ) {
// Unicode
case CP_UTF7 : nResult = CP_UTF16 ; break ;
case CP_UTF8 : nResult = CP_UTF16 ; break ;
case CP_UTF16_BE : nResult = CP_UTF16 ; break ;
case CP_UTF32 : nResult = CP_UTF16 ; break ;
case CP_UTF32_BE : nResult = CP_UTF16 ; break ;
// Japanese
case CP_ISO_JAPANESE : nResult = CP_JAPANESE ; break ;
case CP_ISO_JAPANESE_AND_KANA : nResult = CP_JAPANESE ; break ;
case CP_ISO_JAPANESE_AND_KANA_SIO : nResult = CP_JAPANESE ; break ;
// Korean
case CP_ISO_KOREAN : nResult = CP_KOREAN ; break ;
// Chinese
case CP_HZ_CHINESE_SIMPLIFIED : nResult = CP_CHINESE_SIMPLIFIED ; break ;
// etc.
default : nResult = nCodePage ; break ;
}
return nResult ;
}
// 儌乕僪偺側偄僐乕僪儁乕僕偐傜 Windows 婎杮僐乕僪儁乕僕傪曉偡
int GetWinCodePage ( int nCodePage ) {
int nResult ;
switch ( nCodePage ) {
// Japanese
case CP_JAPANESE : nResult = CP_JAPANESE ; break ;
case CP_MAC_JAPANESE : nResult = CP_JAPANESE ; break ;
case CP_EUC_JAPANESE : nResult = CP_JAPANESE ; break ;
case CP_EUC_JAPANESE_MS : nResult = CP_JAPANESE ; break ;
// Korean
case CP_KOREAN : nResult = CP_KOREAN ; break ;
case CP_KOREAN_JOHAB : nResult = CP_KOREAN ; break ;
case CP_MAC_KOREAN : nResult = CP_KOREAN ; break ;
case CP_EUC_KOREAN : nResult = CP_KOREAN ; break ;
case CP_EUC_KOREAN_2 : nResult = CP_KOREAN ; break ;
// Chinese
case CP_CHINESE_SIMPLIFIED : nResult = CP_CHINESE_SIMPLIFIED ; break ;
case CP_CHINESE_SIMPLIFIED_EX : nResult = CP_CHINESE_SIMPLIFIED ; break ;
case CP_MAC_CHINESE_SIMPLIFIED : nResult = CP_CHINESE_SIMPLIFIED ; break ;
case CP_EUC_CHINESE_SIMPLIFIED : nResult = CP_CHINESE_SIMPLIFIED ; break ;
case CP_CHINESE_SIMPLIFIED_2 : nResult = CP_CHINESE_SIMPLIFIED ; break ;
// Chinese
case CP_CHINESE_TRADITIONAL : nResult = CP_CHINESE_TRADITIONAL ; break ;
case CP_CHINESE_HKSCS : nResult = CP_CHINESE_TRADITIONAL ; break ;
case CP_MAC_CHINESE_TRADITIONAL : nResult = CP_CHINESE_TRADITIONAL ; break ;
case CP_CHINESE_TRADITIONAL_2 : nResult = CP_CHINESE_TRADITIONAL ; break ;
case CP_EUC_CHINESE_TRADITIONAL : nResult = CP_CHINESE_TRADITIONAL ; break ;
// Thai
case CP_THAI : nResult = CP_THAI ; break ;
case CP_MAC_THAI : nResult = CP_THAI ; break ;
// European
case CP_WIN31_EUROPEAN : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_EUROPEAN : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_EUROPEAN_EURO : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_PORTUGUESE : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_ICELANDIC : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_CANADIAN_FRENCH : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_NORDIC : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_ANSI_EUROPEAN : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_MAC_EUROPEAN : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_MAC_ICELANDIC : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_ISO_EUROPEAN : nResult = CP_ANSI_EUROPEAN ; break ;
case CP_ISO_NORDIC : nResult = CP_ANSI_EUROPEAN ; break ;
// Central European
case CP_CENTRAL_EUROPEAN : nResult = CP_ANSI_CENTRAL_EUROPEAN ; break ;
case CP_ANSI_CENTRAL_EUROPEAN : nResult = CP_ANSI_CENTRAL_EUROPEAN ; break ;
case CP_MAC_CENTRAL_EUROPEAN : nResult = CP_ANSI_CENTRAL_EUROPEAN ; break ;
case CP_ISO_CENTRAL_EUROPEAN : nResult = CP_ANSI_CENTRAL_EUROPEAN ; break ;
case CP_MAC_CROATIAN : nResult = CP_ANSI_CENTRAL_EUROPEAN ; break ;
case CP_MAC_ROMANIAN : nResult = CP_ANSI_CENTRAL_EUROPEAN ; break ;
case CP_ISO_ROMANIAN : nResult = CP_ANSI_CENTRAL_EUROPEAN ; break ;
// Greek
case CP_GREEK : nResult = CP_ANSI_GREEK ; break ;
case CP_MODERN_GREEK : nResult = CP_ANSI_GREEK ; break ;
case CP_ANSI_GREEK : nResult = CP_ANSI_GREEK ; break ;
case CP_MAC_GREEK : nResult = CP_ANSI_GREEK ; break ;
case CP_ISO_GREEK : nResult = CP_ANSI_GREEK ; break ;
// Cyrillic
case CP_CYRILLIC : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_RUSSIAN : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_ANSI_CYRILLIC : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_MAC_CYRILLIC : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_MAC_UKRAINIAN : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KOI8R : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KOI8U : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_ISO_CYRILLIC : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KOI8RU : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KOI8T : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KOI8C : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KOI8O : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KOI8UNI : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_ECMA : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_CYRWIN : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_ASIAN : nResult = CP_ANSI_CYRILLIC ; break ;
case CP_CYRILLIC_KAZ : nResult = CP_ANSI_CYRILLIC ; break ;
// Turkish
case CP_TURKISH : nResult = CP_ANSI_TURKISH ; break ;
case CP_ANSI_TURKISH : nResult = CP_ANSI_TURKISH ; break ;
case CP_MAC_TURKISH : nResult = CP_ANSI_TURKISH ; break ;
case CP_ISO_TURKISH_OLD : nResult = CP_ANSI_TURKISH ; break ;
case CP_ISO_TURKISH : nResult = CP_ANSI_TURKISH ; break ;
// Baltic
case CP_BALTIC : nResult = CP_ANSI_BALTIC ; break ;
case CP_ANSI_BALTIC : nResult = CP_ANSI_BALTIC ; break ;
case CP_ISO_BALTIC : nResult = CP_ANSI_BALTIC ; break ;
case CP_ISO_BALTIC_EX : nResult = CP_ANSI_BALTIC ; break ;
// Arabic
case CP_ARABIC_ASMO_708 : nResult = CP_ANSI_ARABIC ; break ;
case CP_ARABIC_ASMO_449P : nResult = CP_ANSI_ARABIC ; break ;
case CP_ARABIC_TP : nResult = CP_ANSI_ARABIC ; break ;
case CP_ARABIC_NAFITHA : nResult = CP_ANSI_ARABIC ; break ;
case CP_ARABIC_TP_ASMO : nResult = CP_ANSI_ARABIC ; break ;
case CP_ARABIC : nResult = CP_ANSI_ARABIC ; break ;
case CP_ANSI_ARABIC : nResult = CP_ANSI_ARABIC ; break ;
case CP_MAC_ARABIC : nResult = CP_ANSI_ARABIC ; break ;
case CP_ISO_ARABIC : nResult = CP_ANSI_ARABIC ; break ;
case CP_PERSIAN_ISIRI : nResult = CP_ANSI_ARABIC ; break ;
// Hebrew
case CP_HEBREW_OLD : nResult = CP_ANSI_HEBREW ; break ;
case CP_HEBREW : nResult = CP_ANSI_HEBREW ; break ;
case CP_ANSI_HEBREW : nResult = CP_ANSI_HEBREW ; break ;
case CP_MAC_HEBREW : nResult = CP_ANSI_HEBREW ; break ;
case CP_ISO_HEBREW_VISUAL : nResult = CP_ANSI_HEBREW ; break ;
case CP_ISO_HEBREW_LOGICAL : nResult = CP_ANSI_HEBREW ; break ;
// etc.
default :
if ( IsCodePageVietnamese ( nCodePage ) ) { nResult = CP_ANSI_VIETNAMESE ; break ; }
if ( IsTaiwanLegacyCodePage ( nCodePage ) ) { nResult = CP_CHINESE_TRADITIONAL ; break ; }
nResult = nCodePage ; break ;
}
return nResult ;
}
// Windows 婎杮僐乕僪儁乕僕偑儅儖僠僶僀僩偐偳偆偐
int IsMultiByteCodePage ( int nCodePage ) {
int nResult ;
switch ( nCodePage ) {
case CP_JAPANESE :
case CP_KOREAN :
case CP_CHINESE_SIMPLIFIED :
case CP_CHINESE_TRADITIONAL :
nResult = 1 ; break ;
default :
nResult = 0 ; break ;
}
return nResult ;
}
// 儀僩僫儉岅偺僐乕僪儁乕僕偐偳偆偐
int IsCodePageVietnamese ( int nCodePage ) {
int nResult ;
switch ( nCodePage ) {
case CP_ANSI_VIETNAMESE :
case CP_VIETNAMESE_TCVN :
case CP_VIETNAMESE_TCVN2 :
case CP_VIETNAMESE_TCVN3 :
case CP_VIETNAMESE_VISCII :
case CP_VIETNAMESE_VPS :
case CP_VIETNAMESE_VNI :
case CP_VIETNAMESE_VIQR :
nResult = 1 ; break ;
default :
nResult = 0 ; break ;
}
return nResult ;
}
// Macintosh 偺僐乕僪儁乕僕偐偳偆偐
int IsMacCodePage ( int nCodePage ) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -