📄 hcodecnvt.c
字号:
if (bTranslated == true)
{
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
return false;
}
bool
hccUni2KSC_SpacingModifier(wchar_t uniSyl, unsigned char *kscSyl)
{
unsigned short uiSyl;
bool bTranslated = false;
//0x02b0 - 0x02ff
if (uniSyl < 0x02B0 || uniSyl > 0x02FF)
return false;
switch (uniSyl)
{
case 0x02C7:
uiSyl = 0xA2A7; bTranslated = true; break;
case 0x02D0:
uiSyl = 0xA2B0; bTranslated = true; break;
case 0x02D8:
uiSyl = 0xA2A8; bTranslated = true; break;
case 0x02D9:
uiSyl = 0xA2AB; bTranslated = true; break;
case 0x02DA:
uiSyl = 0xA2AA; bTranslated = true; break;
case 0x02DB:
uiSyl = 0xA2AD; bTranslated = true; break;
case 0x02DD:
uiSyl = 0xA2A9; bTranslated = true; break;
default: break;
}
if (bTranslated == true)
{
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
return false;
}
bool
hccUni2KSC_GeneralPunc(wchar_t uniSyl, unsigned char *kscSyl)
{
unsigned short uiSyl;
bool bTranslated = false;
// 0x2000 - 0x206f
if (uniSyl < 0x2000 || uniSyl > 0x206f)
return false;
switch (uniSyl)
{
case 0x2015:
uiSyl = 0xA1AA; bTranslated = true; break;
case 0x2018:
uiSyl = 0xA1AE; bTranslated = true; break;
case 0x2019:
uiSyl = 0xA1AF; bTranslated = true; break;
case 0x201C:
uiSyl = 0xA1A8; bTranslated = true; break;
case 0x201D:
uiSyl = 0xA3A2; bTranslated = true; break;
case 0x2020:
uiSyl = 0xA2D3; bTranslated = true; break;
case 0x2021:
uiSyl = 0xA2D4; bTranslated = true; break;
case 0x2025:
uiSyl = 0xA1A5; bTranslated = true; break;
case 0x2026:
uiSyl = 0xA1A6; bTranslated = true; break;
case 0x2030:
uiSyl = 0xA2B6; bTranslated = true; break;
case 0x2032:
uiSyl = 0xA1C7; bTranslated = true; break;
case 0x2033:
uiSyl = 0xA1C8; bTranslated = true; break;
case 0x203B:
uiSyl = 0xA1D8; bTranslated = true; break;
default: break;
}
if (bTranslated == true)
{
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
return false;
}
bool
hccUni2KSC_Latin(wchar_t uniSyl, unsigned char *kscSyl)
{
unsigned short uiSyl;
bool bTranslated = false;
// If not Lantin-1, Latin Extended-A, Latin Extended-B
// return false
//if (uniSyl < 0x0020 || uniSyl > 0x023f)
if (uniSyl < 0x0001 || uniSyl > 0x023f)
return false;
//Latin-1
//if (uniSyl >= 0x0020 && uniSyl <= 0x007E)
if (uniSyl >= 0x0001 && uniSyl <= 0x007E)
{
*kscSyl = uniSyl & 0x00FF;
*(kscSyl+1) = '\0';
return true;
}
// [Latin-1]
switch (uniSyl)
{
case 0x00A1:
uiSyl = 0xA2AE; bTranslated = true; break;
case 0x00A2:
uiSyl = 0xA1CB; bTranslated = true; break;
case 0x00A3:
uiSyl = 0xA1CC; bTranslated = true; break;
case 0x00A4:
uiSyl = 0xA2B4; bTranslated = true; break;
case 0x00A5:
uiSyl = 0xA1CD; bTranslated = true; break;
case 0x00A6:
uiSyl = 0xA3FC; bTranslated = true; break;
case 0x00A7:
uiSyl = 0xA1D7; bTranslated = true; break;
case 0x00A8:
uiSyl = 0xA1A7; bTranslated = true; break;
case 0x00A9:
uiSyl = 0xA8CF; bTranslated = true; break;
case 0x00AB:
uiSyl = 0xA1EC; bTranslated = true; break;
case 0x00AC:
uiSyl = 0xA1FE; bTranslated = true; break;
case 0x00AD:
uiSyl = 0xA1A9; bTranslated = true; break;
case 0x00AE:
uiSyl = 0xA8DE; bTranslated = true; break;
case 0xA1B0:
uiSyl = 0xA2AA; bTranslated = true; break;
case 0x00B1:
uiSyl = 0xA1BE; bTranslated = true; break;
case 0x00B2:
uiSyl = 0xA9F7; bTranslated = true; break;
case 0x00B3:
uiSyl = 0xA9F8; bTranslated = true; break;
case 0x00B4:
uiSyl = 0xA2A5; bTranslated = true; break;
case 0x00B5:
uiSyl = 0xA5EC; bTranslated = true; break;
case 0x00B6:
uiSyl = 0xA2D2; bTranslated = true; break;
case 0x00B7:
uiSyl = 0xA2AB; bTranslated = true; break;
case 0x00B8:
uiSyl = 0xA3AC; bTranslated = true; break;
case 0x00B9:
uiSyl = 0xA9F6; bTranslated = true; break;
case 0x00BA:
uiSyl = 0xA8AC; bTranslated = true; break;
case 0x00BB:
uiSyl = 0xA1ED; bTranslated = true; break;
case 0x00BC:
uiSyl = 0xA8F9; bTranslated = true; break;
case 0x00BD:
uiSyl = 0xA8F6; bTranslated = true; break;
case 0x00BE:
uiSyl = 0xA8FA; bTranslated = true; break;
case 0x00BF:
uiSyl = 0xA2AF; bTranslated = true; break;
case 0x00C5:
uiSyl = 0xA1CA; bTranslated = true; break;
case 0x00C6:
uiSyl = 0xA8A1; bTranslated = true; break;
case 0x00D0:
uiSyl = 0xA8A2; bTranslated = true; break;
case 0x00D7:
uiSyl = 0xA1BF; bTranslated = true; break;
case 0x00D8:
uiSyl = 0xA8AA; bTranslated = true; break;
case 0x00DE:
uiSyl = 0xA8AD; bTranslated = true; break;
case 0x00DF:
uiSyl = 0xA9AC; bTranslated = true; break;
case 0x00E6:
uiSyl = 0xA9A1; bTranslated = true; break;
case 0x00F0:
uiSyl = 0xA9A3; bTranslated = true; break;
case 0x00F7:
uiSyl = 0xA1C0; bTranslated = true; break;
case 0x00F8:
uiSyl = 0xA9AA; bTranslated = true; break;
case 0x00FE:
uiSyl = 0xA9AD; bTranslated = true; break;
}
if (bTranslated == true)
{
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
// [Latin Extended-A]
if (uniSyl >= 0x0100 && uniSyl <= 0x017F)
{
switch (uniSyl)
{
case 0x0111:
uiSyl = 0xA9A2; bTranslated = true; break;
case 0x0126:
uiSyl = 0xA8A4; bTranslated = true; break;
case 0x0127:
uiSyl = 0xA9A4; bTranslated = true; break;
case 0x0131:
uiSyl = 0xA9A5; bTranslated = true; break;
case 0x0132:
uiSyl = 0xA8A6; bTranslated = true; break;
case 0x0133:
uiSyl = 0xA9A6; bTranslated = true; break;
case 0x0138:
uiSyl = 0xA9A7; bTranslated = true; break;
case 0x013F:
uiSyl = 0xA8A8; bTranslated = true; break;
case 0x0140:
uiSyl = 0xA9A8; bTranslated = true; break;
case 0x0141:
uiSyl = 0xA8A9; bTranslated = true; break;
case 0x0142:
uiSyl = 0xA9A9; bTranslated = true; break;
case 0x0149:
uiSyl = 0xA9B0; bTranslated = true; break;
case 0x014A:
uiSyl = 0xA8AF; bTranslated = true; break;
case 0x014B:
uiSyl = 0xA9AF; bTranslated = true; break;
case 0x0166:
uiSyl = 0xA8AE; bTranslated = true; break;
case 0x0167:
uiSyl = 0xA9AE; bTranslated = true; break;
default: break;
}
if (bTranslated == true)
{
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
}
return false;
}
bool
hccUni2KSC_DefaultChars(wchar_t uniSyl, unsigned char *kscSyl)
{
unsigned short uiSyl;
bool bTranslated = false;
switch (uniSyl)
{
// Unicode [Letterlike Symbols]
case 0x2103: // Clecius
uiSyl = 0xA1C9; bTranslated = true; break;
case 0x2109: // Farenheit
uiSyl = 0xA2B5; bTranslated = true; break;
case 0x2113: // Litter
uiSyl = 0xA7A4; bTranslated = true; break;
case 0x2116: // No.
uiSyl = 0xA2E0; bTranslated = true; break;
case 0x2121: // Tel
uiSyl = 0xA2E5; bTranslated = true; break;
case 0x2126: // Omega
uiSyl = 0xA7D9; bTranslated = true; break;
case 0x212B: // A0
uiSyl = 0xA1CA; bTranslated = true; break;
//Subscripts & Superscripts
case 0x2074:
uiSyl = 0xA9F9; bTranslated = true; break;
case 0x207F:
uiSyl = 0xA9FA; bTranslated = true; break;
case 0x2081:
uiSyl = 0xA9FB; bTranslated = true; break;
case 0x2082:
uiSyl = 0xA9FC; bTranslated = true; break;
case 0x2083:
uiSyl = 0xA9FD; bTranslated = true; break;
case 0x2084:
uiSyl = 0xA9FE; bTranslated = true; break;
// Unicode [Currency Symbols]
case 0x20A9:
uiSyl = 0xA3DC; bTranslated = true; break;
// Unicode [Arrows]
case 0x2190: //
uiSyl = 0xA1E7; bTranslated = true; break;
case 0x2191:
uiSyl = 0xA1E8; bTranslated = true; break;
case 0x2192:
uiSyl = 0xA1E6; bTranslated = true; break;
case 0x2193:
uiSyl = 0xA1E9; bTranslated = true; break;
case 0x2194:
uiSyl = 0xA1EA; bTranslated = true; break;
case 0x2195:
uiSyl = 0xA2D5; bTranslated = true; break;
case 0x2196:
uiSyl = 0xA2D8; bTranslated = true; break;
case 0x2197:
uiSyl = 0xA2D6; bTranslated = true; break;
case 0x2198:
uiSyl = 0xA2D9; bTranslated = true; break;
case 0x2199:
uiSyl = 0xA2D7; bTranslated = true; break;
case 0x21D2:
uiSyl = 0xA2A1; bTranslated = true; break;
case 0x21D4:
uiSyl = 0xA2A2; bTranslated = true; break;
// [Micellaneous Technical]
case 0x2312:
uiSyl = 0xA1D2; bTranslated = true; break;
// [Block Elements]
case 0x2592:
uiSyl = 0xA2C6; bTranslated = true; break;
default: break;
}
if (bTranslated == true)
{
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
return false;
}
bool
hccUni2KSCSymbols(wchar_t uniSyl, unsigned char *kscSyl)
{
unsigned short uiSyl;
//If [ASCII]
//if (uniSyl >= 0x0020 && uniSyl <= 0x007E)
if (uniSyl >= 0x0001 && uniSyl <= 0x007E)
{
*kscSyl = (unsigned char) uniSyl;
*(kscSyl+1) = '\0';
return true;
}
//Basic Greek Alphabets - Capital Letters
else if (uniSyl >= 0x0391 && uniSyl <= 0x03A9)
{
uiSyl = (uniSyl - 0x0391) + 0xA5C1;
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
// Basic Greek Alphabets - Small Letters
else if (uniSyl >= 0x03B1 && uniSyl <= 0x03C9)
{
uiSyl = (uniSyl - 0x03B1) + 0xA5E1;
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
// Japanese
else if (uniSyl >= 0x3040 && uniSyl <= 0x30FF)
{
if (hccUni2KSCJapanese(uniSyl, kscSyl) == true)
return true;
}
// Cyrill Alphabets - Capital
else if (uniSyl >= 0x0401 && uniSyl <= 0x047F)
{
if (uniSyl == 0x0401)
uiSyl = 0xACA7;
else if (uniSyl == 0x0451)
uiSyl = 0xACD7;
else if (uniSyl >= 0x0410 && uniSyl <= 0x0415)
uiSyl = uniSyl - 0x0410 + 0xACA1;
else if (uniSyl >= 0x0416 && uniSyl <= 0x042F)
uiSyl = uniSyl - 0x0410 + 0xACA8;
else if (uniSyl >= 0x0430 && uniSyl <= 0x0435)
uiSyl = uniSyl - 0x0430 + 0xACD1;
else if (uniSyl >= 0x0436 && uniSyl <= 0x044F)
uiSyl = uniSyl - 0x0436 + 0xACD8;
else return false;
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
// Number Forms
else if (uniSyl >= 0x2150 && uniSyl <= 0x218F)
{
if (uniSyl >= 0x2160 && uniSyl <= 0x2169)
uiSyl = uniSyl - 0x2160 + 0xA5B0;
else if (uniSyl >= 0x2170 && uniSyl <= 0x2179)
uiSyl = uniSyl - 0x2170 + 0xA5A1;
else if (uniSyl >= 0x215B && uniSyl <= 0x215E)
uiSyl = uniSyl - 0x215B + 0xA8FB;
else if (uniSyl == 0x2153 || uniSyl == 0x2154)
uiSyl = uniSyl - 0x2153 + 0xA8F7;
else
return false;
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
*(kscSyl+2) = '\0';
return true;
}
// CJK Compatibility: 3300 - 33ff
else if (uniSyl >= 0x3300 && uniSyl <= 0x33FF)
{
if (hccUni2KSC_CJKCompatible(uniSyl, kscSyl) == true)
return true;
}
// Box Drawing
else if (uniSyl >= 0x2500 && uniSyl <= 0x257F)
{
if (hccUni2KSC_BoxDrawing(uniSyl, kscSyl) == true)
return true;
}
return false;
}
void
Uni2KSCSyl(wchar_t uniSyl, unsigned char *kscSyl)
{
unsigned short uiSyl;
bool bTranslated = false;
unsigned short uniCHO;
unsigned short uniJUNG;
unsigned short uniJONG;
structHSyl hSyl;
// [Hangul] or [Hangul Compatibility Jamo]
if ( (uniSyl >= 0xAC00 && uniSyl <= 0xD7A3) || // [Hangul]
(uniSyl >= 0x3131 && uniSyl <= 0x318E) ) // [Hangul Compatibility Jamo]
{
bTranslated = hccUni2KSCSyl(uniSyl, kscSyl);
if (bTranslated == false)
{
uniCHO = (uniSyl - 0xAC00) / 588;
uniJUNG = ((uniSyl - 0xAC00) % 588) / 28;
uniJONG = (uniSyl - 0xAC00) % 28;
uniCHO = uniCHO + 0x0002;
uniJUNG = hctbl_UNI2KSSM_JUNG[uniJUNG];
HAN_COMBI(hSyl, uniCHO, uniJUNG, KSSM_JONG_FILL);
uiSyl = ConvertTG2KSSyl(hSyl.hCode);
*kscSyl = uiSyl >> 8;
*(kscSyl+1) = uiSyl & 0x00ff;
// JONG to CHO Convert
uniJONG = hctbl_UNIJONG2KSCHO[uniJONG];
*(kscSyl+2) = uniJONG >> 8;
*(kscSyl+3) = uniJONG & 0x00ff;
*(kscSyl+4) = '\0';
}
return;
}
// [Latin-1, Latin Extended-A, Latin Extended-B
//if (uniSyl >= 0x0020 && uniSyl <= 0x023F)
if (uniSyl >= 0x0001 && uniSyl <= 0x023F)
bTranslated = hccUni2KSC_Latin(uniSyl, kscSyl);
// [Spacing Modifier Letters]
else if (uniSyl >= 0x02B0 && uniSyl <= 0x02EF)
bTranslated = hccUni2KSC_SpacingModifier(uniSyl, kscSyl);
// [Basic Greek]
else if (uniSyl >= 0x0370 && uniSyl <= 0x03CF)
bTranslated = hccUni2KSCSymbols(uniSyl, kscSyl);
// [Cyrillic]
else if (uniSyl >= 0x0400 && uniSyl <= 0x04FF)
bTranslated = hccUni2KSCSymbols(uniSyl, kscSyl);
// [General Punctuation]
else if (uniSyl >= 0x2000 && uniSyl <= 0x205F)
bTranslated = hccUni2KSC_GeneralPunc(uniSyl, kscSyl);
// [Superscripts and Subscripts]
else if (uniSyl >= 0x2070 && uniSyl <= 0x208F)
bTranslated = hccUni2KSC_DefaultChars(uniSyl, kscSyl);
// [Currency Symbols]
else if (uniSyl >= 0x20A0 && uniSyl <= 0x20CF)
bTranslated = hccUni2KSC_DefaultChars(uniSyl, kscSyl);
// [Letter Like Symbols]
else if (uniSyl >= 0x2100 && uniSyl <= 0x213F)
bTranslated = hccUni2KSC_DefaultChars(uniSyl, kscSyl);
// [Number Fomrs]
else if (uniSyl >= 0x2150 && uniSyl <= 0x218F)
bTranslated = hccUni2KSCSymbols(uniSyl, kscSyl);
// [Arrows]
else if (uniSyl >= 0x2190 && uniSyl <= 0x21FF)
bTranslated = hccUni2KSC_DefaultChars(uniSyl, kscSyl);
// [Mathematical Operators]
else if (uniSyl >= 0x2200 && uniSyl <= 0x22FF)
bTranslated = hccUni2KSC_MathOperator(uniSyl, kscSyl);
// [Miscellaneous Technical]
else if (uniSyl >= 0x2300 && uniSyl <= 0x23FF)
bTranslated = hccUni2KSC_DefaultChars(uniSyl, kscSyl);
// [Enclosed Alphnumerics]
else if (uniSyl >= 0x2460 && uniSyl <= 0x24FF)
bTranslated = hccUni2KSC_EnclosedAlphaNumerics(uniSyl, kscSyl);
// [Box Drawing]
else if (uniSyl >= 0x2500 && uniSyl <= 0x257F)
bTranslated = hccUni2KSC_BoxDrawing(uniSyl, kscSyl);
// [ Block Elements]
else if (uniSyl >= 0x2580 && uniSyl <= 0x259F)
bTranslated = hccUni2KSC_DefaultChars(uniSyl, kscSyl);
// [Geometric Shapes]
else if (uniSyl >= 0x25A0 && uniSyl <= 0x25FF)
bTranslated = hccUni2KSC_GeometricShapes(uniSyl, kscSyl);
// [Miscellaneous Dingbats]
else if (uniSyl >= 0x2600 && uniSyl <= 0x26FF)
{
bTranslated = hccUni2KSC_MiscDingbats(uniSyl, kscSyl);
}
// [CJK Symbols and Punctuation]
else if (uniSyl >= 0x3000 && uniSyl <= 0x303F)
bTranslated = hccUni2KSC_CJKSymPunc(uniSyl, kscSyl);
// (Japanese) [Hiragana] [Katakana]
else if (uniSyl >= 0x3040 && uniSyl <= 0x30FF)
bTranslated = hccUni2KSCJapanese(uniSyl, kscSyl);
// [Enclosed CJK Letters & Months]
else if (uniSyl >= 0x3200 && uniSyl <= 0x32FF)
bTranslated = hccUni2KSC_EnclosedCJKLetters(uniSyl, kscSyl);
// [CJK Compatibility]
else if (uniSyl >= 0x3300 && uniSyl <= 0x33FF)
bTranslated = hccUni2KSC_CJKCompatible(uniSyl, kscSyl);
// [Halfwidth and Fullwidth Forms]
else if (uniSyl >= 0xFF00 && uniSyl <= 0xFFEF)
bTranslated = hccUni2KSC_HalfFullForms(uniSyl, kscSyl);
if (bTranslated == false)
{
*kscSyl = ' ';
*(kscSyl+1) = '\0';
}
}
int
Uni2KSCString(wchar_t *uniString, unsigned char *kscString)
{
unsigned char kscBuf[128];
unsigned char *pStr;
unsigned long i;
int kscLen;
for (pStr = kscString, i = 0, kscLen = 0; uniString[i] != 0x0000; i++)
{
Uni2KSCSyl(uniString[i], kscBuf);
strcpy((char *) pStr, (char *) kscBuf);
pStr = (unsigned char *) strchr((char *) pStr, '\0');
kscLen += strlen((char *) kscBuf);
}
return kscLen;
}
//**************************************************************
//
// KS C 5601 to Unicode Conversion
//
//**************************************************************
bool
KSC2UniSyl(unsigned char *kscSyl, wchar_t *uniSyl)
{
unsigned short ksSyl;
//structHSyl tgSyl;
//unsigned short uniCHO;
//unsigned short uniJUNG;
//unsigned short uniJONG;
if (!kscSyl || !(*kscSyl) )
{
*uniSyl = 0x0000;
return false;
}
if ( ! (*kscSyl & 0x80) )
{
*uniSyl = (wchar_t) *kscSyl;
return true;
}
ksSyl = (*kscSyl << 8) | (*(kscSyl+1) & 0x00ff);
if (hccKSC2UniSyl(ksSyl, uniSyl) == false)
{
*uniSyl = 0x0020;
return true;
}
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -