⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nls.cpp

📁 This software performs code conversion of Chinese characters, including GB2312/GBK and BIG5. It a
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -