using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PKHeX.Core
{
public static class StringConverter
{
///
/// Converts bytes to a string according to the input parameters.
///
/// Encoded data
/// Generation string format
/// Encoding is Japanese
/// Encoding is BigEndian
/// Offset to read from
/// Length of data to read.
/// Decoded string.
public static string GetString(byte[] data, int generation, bool jp, bool bigendian, int count, int offset = 0)
{
if (bigendian)
return generation == 3 ? GetBEString3(data, offset, count) : GetBEString4(data, offset, count);
switch (generation)
{
case 1:
case 2: return GetString1(data, offset, count, jp);
case 3: return GetString3(data, offset, count, jp);
case 4: return GetString4(data, offset, count);
case 5: return GetString5(data, offset, count);
case 6: return GetString6(data, offset, count);
default: return GetString7(data, offset, count);
}
}
///
/// Gets the bytes for a Generation specific string according to the input parameters.
///
/// Decoded string.
/// Generation string format
/// Encoding is Japanese
/// Encoding is BigEndian
///
///
/// Pad to given length
/// Pad with value
/// Encoded data.
public static byte[] SetString(string value, int generation, bool jp, bool bigendian, int maxLength, int language = 0, int padTo = 0, ushort padWith = 0)
{
if (bigendian)
return generation == 3 ? SetBEString3(value, maxLength, padTo, padWith) : SetBEString4(value, maxLength, padTo, padWith);
switch (generation)
{
case 1:
case 2: return SetString1(value, maxLength, jp, padTo, padWith);
case 3: return SetString3(value, maxLength, jp, padTo, padWith);
case 4: return SetString4(value, maxLength, padTo, padWith);
case 5: return SetString5(value, maxLength, padTo, padWith);
case 6: return SetString6(value, maxLength, padTo, padWith);
default: return SetString7(value, maxLength, language, padTo, padWith);
}
}
///
/// Converts Generation 1 encoded data into a string.
///
/// Encoded data.
/// Offset to read from
///
/// Data source is Japanese.
/// Decoded string.
public static string GetString1(byte[] strdata, int offset, int count, bool jp)
{
Dictionary dict = jp ? RBY2U_J : RBY2U_U;
StringBuilder s = new StringBuilder();
for (int i = 0; i < count; i++)
{
byte val = strdata[offset + i];
if (!dict.TryGetValue(val, out string c)) // Take valid values
break;
if (c == "\0") // Stop if Terminator
break;
s.Append(c);
}
return SanitizeString(s.ToString());
}
///
/// Converts Generation 2 Korean encoded data into a string.
///
/// Encoded data.
/// Offset to read from
///
/// Decoded string.
public static string GetString2KOR(byte[] strdata, int offset, int count)
{
StringBuilder s = new StringBuilder();
for (int i = 0; i < count; i++)
{
byte val = strdata[offset + i];
var dict = val <= 0xB ? GSC2U_KOR[val] : RBY2U_U;
if (val <= 0xB && val != 0)
val = strdata[offset + ++i];
if (!dict.TryGetValue(val, out string c)) // Take valid values
break;
if (c == "\0") // Stop if Terminator
break;
s.Append(c);
}
return SanitizeString(s.ToString());
}
///
/// Converts Generation 1 encoded data the same way Bank converts.
///
/// Generation 1 encoded data.
/// Data source is Japanese.
/// Decoded string.
public static string GetG1ConvertedString(byte[] strdata, bool jp)
{
var table = jp ? jp_table : us_table;
return Util.TrimFromZero(new string(strdata.TakeWhile(b => b != 0).Select(b => (char)table[b]).ToArray()));
}
///
/// Converts a string to Generation 1 encoded data.
///
/// Decoded string.
/// Maximum length
/// Data destination is Japanese.
/// Pad to given length
/// Pad with value
/// Encoded data.
public static byte[] SetString1(string value, int maxLength, bool jp, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
Dictionary dict = jp ? U2RBY_J : U2RBY_U;
if (dict.ContainsKey(value)) // Handle "[TRAINER]"
return new[] { dict[value], dict["\0"] };
List arr = new List();
foreach (char c in value)
{
if (!dict.TryGetValue(c.ToString(), out byte val))
break;
arr.Add(val);
}
var term = dict["\0"]; // terminator
arr.Add(term);
while (arr.Count < padTo)
arr.Add((byte)padWith);
return arr.ToArray();
}
///
/// Converts a string to Generation 1 encoded data.
///
/// Decoded string.
/// Maximum length
/// Pad to given length
/// Pad with value
/// Encoded data.
public static byte[] SetString2KOR(string value, int maxLength, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
Dictionary dict = U2RBY_U;
if (value == "트레이너") // Handle "[TRAINER]"
return new[] { (byte)0x55, (byte)0x50 };
List arr = new List();
foreach (char c in value)
{
bool koreanChar = false;
// while byte pairs starting with 0x00 and 0x0B have identical outputs, the game only naturally uses 0x0B pairs.
for (byte i = 1; i < U2GSC_KOR.Length; i++)
{
var table = U2GSC_KOR[i];
if (!table.TryGetValue(c.ToString(), out byte val))
continue;
koreanChar = true;
if (arr.Count + 1 >= maxLength)
break; // adding 2 characters will overflow requested buffer cap
arr.Add(i);
arr.Add(val);
break;
}
if (!koreanChar)
{
if (!dict.TryGetValue(c.ToString(), out byte val))
break;
arr.Add(val);
}
}
while (arr.Count >= maxLength)
arr.RemoveAt(arr.Count - 1);
arr.Add(0x50); // terminator
while (arr.Count < padTo)
arr.Add((byte)padWith);
return arr.ToArray();
}
/// Converts Big Endian encoded data to decoded string.
/// Encoded data
/// Offset to read from
/// Length of data to read.
/// Decoded string.
public static string GetBEString3(byte[] data, int offset, int count)
{
return Util.TrimFromZero(Encoding.BigEndianUnicode.GetString(data, offset, count));
}
/// Gets the bytes for a BigEndian string.
/// Decoded string.
/// Maximum length
/// Pad to given length
/// Pad with value
/// Encoded data.
public static byte[] SetBEString3(string value, int maxLength, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
string temp = SanitizeString(value)
.PadRight(value.Length + 1, (char)0) // Null Terminator
.PadRight(padTo, (char)padWith);
return Encoding.BigEndianUnicode.GetBytes(temp);
}
///
/// Converts a Generation 3 encoded value array to string.
///
/// Byte array containing string data.
/// Offset to read from
/// Length of data to read.
/// Value source is Japanese font.
/// Decoded string.
public static string GetString3(byte[] strdata, int offset, int count, bool jp)
{
StringBuilder s = new StringBuilder();
for (int i = 0; i < count; i++)
{
byte val = strdata[offset + i];
if (val >= 247) // Take valid values
break;
var c = GetG3Char(val, jp); // Convert to Unicode
if (c == 0xFF) // Stop if Terminator
break;
s.Append((char)c);
}
return SanitizeString(s.ToString());
}
///
/// Converts a string to a Generation 3 encoded value array.
///
/// Decoded string.
/// String destination is Japanese font.
/// Maximum length of string
/// Pad to given length
/// Pad with value
///
public static byte[] SetString3(string value, int maxLength, bool jp, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
byte[] strdata = new byte[value.Length + 1]; // +1 for 0xFF
for (int i = 0; i < value.Length; i++)
{
ushort chr = value[i];
byte val = SetG3Char(chr, jp);
if (val == 0xFF || chr == 0xFF)
{ Array.Resize(ref strdata, i); break; }
strdata[i] = val;
}
if (strdata.Length > 0)
strdata[strdata.Length - 1] = 0xFF;
if (strdata.Length > maxLength && padTo <= maxLength)
Array.Resize(ref strdata, maxLength);
if (strdata.Length < padTo)
{
int start = strdata.Length;
Array.Resize(ref strdata, padTo);
for (int i = start; i < strdata.Length; i++)
strdata[i] = (byte)padWith;
}
return strdata;
}
///
/// Converts Generation 4 Big Endian encoded character data to string.
///
/// Byte array containing encoded character data.
/// Offset to read from
/// Length of data to read.
/// Converted string.
public static string GetBEString4(byte[] strdata, int offset, int count)
{
string s = "";
for (int i = 0; i < count; i += 2)
{
ushort val = BigEndian.ToUInt16(strdata, offset + i);
if (val == 0xFFFF) break;
ushort chr = ConvertValue2CharG4(val);
if (chr == 0xFFFF) break;
s += (char)chr;
}
return SanitizeString(s);
}
///
/// Converts a string to Generation 4 Big Endian encoded character data.
///
/// String to be converted.
/// Maximum length of string
/// Pad to given length
/// Pad with value
/// Byte array containing encoded character data
public static byte[] SetBEString4(string value, int maxLength, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
string temp = UnSanitizeString(value, 4) // Replace Special Characters and add Terminator
.PadRight(value.Length + 1, (char)0xFFFF) // Null Terminator
.PadRight(padTo, (char)padWith); // Padding
byte[] strdata = new byte[temp.Length * 2];
for (int i = 0; i < temp.Length; i++)
{
ushort chr = temp[i];
ushort val = ConvertChar2ValueG4(chr);
BigEndian.GetBytes(val).CopyTo(strdata, i * 2);
}
return strdata;
}
/// Converts Generation 4 encoded data to decoded string.
/// Encoded data
/// Offset to read from
/// Length of data to read.
/// Decoded string.
public static string GetString4(byte[] data, int offset, int count)
{
StringBuilder s = new StringBuilder();
for (int i = 0; i < count; i += 2)
{
ushort val = BitConverter.ToUInt16(data, offset + i);
if (val == 0xFFFF) break;
ushort chr = ConvertValue2CharG4(val);
if (chr == 0xFFFF) break;
s.Append((char)chr);
}
return SanitizeString(s.ToString());
}
/// Gets the bytes for a 4th Generation String
/// Decoded string.
/// Maximum length
/// Pad to given length
/// Pad with value
/// Encoded data.
public static byte[] SetString4(string value, int maxLength, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
string temp = UnSanitizeString(value, 4) // Replace Special Characters and add Terminator
.PadRight(value.Length + 1, (char)0xFFFF) // Null Terminator
.PadRight(padTo, (char)padWith); // Padding
byte[] strdata = new byte[temp.Length * 2];
for (int i = 0; i < temp.Length; i++)
{
ushort chr = temp[i];
ushort val = ConvertChar2ValueG4(chr);
BitConverter.GetBytes(val).CopyTo(strdata, i * 2);
}
return strdata;
}
/// Converts Generation 5 encoded data to decoded string.
/// Encoded data
/// Offset to read from
/// Length of data to read.
/// Decoded string.
public static string GetString5(byte[] data, int offset, int count)
{
return SanitizeString(TrimFromFFFF(Encoding.Unicode.GetString(data, offset, count)));
}
/// Gets the bytes for a Generation 5 string.
/// Decoded string.
/// Maximum length
/// Pad to given length
/// Pad with value
/// Encoded data.
public static byte[] SetString5(string value, int maxLength, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
string temp = UnSanitizeString(value, 5)
.PadRight(value.Length + 1, (char)0xFFFF) // Null Terminator
.PadRight(padTo, (char)padWith); // Padding
return Encoding.Unicode.GetBytes(temp);
}
/// Converts Generation 6 encoded data to decoded string.
/// Encoded data
/// Offset to read from
/// Length of data to read.
/// Decoded string.
public static string GetString6(byte[] data, int offset, int count)
{
return SanitizeString(Util.TrimFromZero(Encoding.Unicode.GetString(data, offset, count)));
}
/// Gets the bytes for a Generation 6 string.
/// Decoded string.
/// Maximum length
/// Pad to given length
/// Pad with value
/// Encoded data.
public static byte[] SetString6(string value, int maxLength, int padTo = 0, ushort padWith = 0)
{
if (value.Length > maxLength)
value = value.Substring(0, maxLength); // Hard cap
string temp = UnSanitizeString(value, 6)
.PadRight(value.Length + 1, '\0') // Null Terminator
.PadRight(padTo, (char)padWith);
return Encoding.Unicode.GetBytes(temp);
}
/// Converts Generation 7 encoded data to decoded string.
/// Encoded data
/// Offset to read from
/// Length of data to read.
/// Decoded string.
public static string GetString7(byte[] data, int offset, int count)
{
return ConvertBin2StringG7_zh(SanitizeString(Util.TrimFromZero(Encoding.Unicode.GetString(data, offset, count))));
}
/// Gets the bytes for a Generation 7 string.
/// Decoded string.
/// Maximum length
/// Language specific conversion (Chinese)
/// Pad to given length
/// Pad with value
/// Chinese string remapping should be attempted
/// Encoded data.
public static byte[] SetString7(string value, int maxLength, int language, int padTo = 0, ushort padWith = 0, bool chinese = false)
{
if (chinese)
value = ConvertString2BinG7_zh(value, language);
if (value.Length > maxLength)
value = value.Substring(0, 12); // Hard cap
string temp = UnSanitizeString(value, 7)
.PadRight(value.Length + 1, '\0') // Null Terminator
.PadRight(padTo, (char)padWith);
return Encoding.Unicode.GetBytes(temp);
}
///
/// Converts Generation 1 encoded character to string.
///
/// Encoded character.
/// Data source is Japanese.
/// Decoded string.
public static string GetG1Char(byte key, bool jp)
{
Dictionary dict = jp ? RBY2U_J : RBY2U_U;
return dict.ContainsKey(key) ? dict[key] : "";
}
public static bool GetIsG1Japanese(string str) => str.All(z => U2RBY_J.ContainsKey(z.ToString()));
public static bool GetIsG1English(string str) => str.All(z => U2RBY_U.ContainsKey(z.ToString()));
public static bool GetIsG2Korean(string str) => str.All(z => U2GSC_KOR.Any(x => x.ContainsKey(z.ToString())));
///
/// Converts a Unicode string to Generation 7 in-game chinese string.
///
/// Unicode string.
/// Detection of language for Traditional Chinese check
/// In-game chinese string.
private static string ConvertString2BinG7_zh(string inputstr, int lang)
{
var str = new StringBuilder();
bool cht = lang == 10;
// A string cannot contain a mix of CHS and CHT characters.
bool IsCHT = inputstr.Any(chr => Gen7_CHT.Contains(chr) && !Gen7_CHS.Contains(chr));
IsCHT |= cht && !inputstr.Any(chr => Gen7_CHT.Contains(chr) ^ Gen7_CHS.Contains(chr)); // CHS and CHT have the same display name
var table = IsCHT ? Gen7_CHT : Gen7_CHS;
ushort ofs = IsCHT ? Gen7_CHT_Ofs : Gen7_CHS_Ofs;
foreach (char chr in inputstr)
{
var index = Array.IndexOf(table, chr);
var val = index > -1 ? (char) (ofs + index) : chr;
str.Append(val);
}
return str.ToString();
}
///
/// Converts a Generation 7 in-game chinese string to Unicode string.
///
/// In-game chinese string.
/// Unicode string.
private static string ConvertBin2StringG7_zh(string inputstr)
{
var str = new StringBuilder();
foreach (var val in inputstr)
str.Append((char)Getg7zhChar(val));
return str.ToString();
}
///
/// Shifts a character from the CHS/CHT character tables
///
/// Input value to shift
/// Shifted character
private static ushort Getg7zhChar(ushort val)
{
if (Gen7_CHS_Ofs <= val && val < Gen7_CHS_Ofs + Gen7_CHS.Length) // within CHS char table
return Gen7_CHS[val - Gen7_CHS_Ofs];
if (Gen7_CHT_Ofs <= val && val < Gen7_CHT_Ofs + Gen7_CHT.Length) // within CHT char table
return Gen7_CHT[val - Gen7_CHT_Ofs];
return val; // regular character
}
///
/// Converts a Generation 4 value to Unicode character.
///
/// Encoded value.
/// Decoded value (unicode).
private static ushort ConvertValue2CharG4(ushort val)
{
return G4ValueId.TryGetValue(val, out int index)
? G4Chars[index] : ushort.MaxValue;
}
///
/// Converts a Unicode character to Generation 4 value.
///
/// Decoded value (unicode).
/// Encoded value.
private static ushort ConvertChar2ValueG4(ushort chr)
{
return G4CharId.TryGetValue(chr, out int index)
? G4Values[index] : ushort.MaxValue;
}
///
/// Converts a Generation 3 encoded value to corresponding Generation 4 encoded value.
///
/// Generation 3 encoded value.
/// Value source is Japanese font.
/// Generation 4 encoded value.
private static ushort GetG4Val(byte val, bool jp) => jp ? G34_4J[val] : G34_4E[val];
///
/// Converts a Generation 3 encoded value to corresponding Generation 4 decoded character.
///
/// Generation 3 encoded value.
/// Value source is Japanese font.
/// Decoded value.
private static ushort GetG3Char(byte val, bool jp) => ConvertValue2CharG4(GetG4Val(val, jp));
///
/// Converts a Generation 4 decoded character to Generation 3 encoded value.
///
/// Generation 4 decoded character.
/// Character destination is Japanese font.
/// Generation 3 encoded value.
private static byte SetG3Char(ushort chr, bool jp)
{
int index = Array.IndexOf(jp ? G34_4J : G34_4E, ConvertChar2ValueG4(chr));
return (byte)(index > -1 ? index : 0xFF);
}
#region Gen 1/2 Character Tables
///
/// International 1->7 character translation table
///
private static readonly ushort[] us_table = { 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x0028, 0x0029, 0x003A, 0x003B, 0x0028, 0x0029, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x00C4, 0x00D6, 0x00DC, 0x00E4, 0x00F6, 0x00FC, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0050, 0x004D, 0x002D, 0x0020, 0x0020, 0x003F, 0x0021, 0x002D, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0xE08E, 0x0020, 0x0078, 0x002E, 0x002F, 0x002C, 0xE08F, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020 };
///
/// Japanese 1->7 character translation table
///
private static readonly ushort[] jp_table = { 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x30AC, 0x30AE, 0x30B0, 0x30B2, 0x30B4, 0x30B6, 0x30B8, 0x30BA, 0x30BC, 0x30BE, 0x30C0, 0x30C2, 0x30C5, 0x30C7, 0x30C9, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x30D0, 0x30D3, 0x30D6, 0x30DC, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x304C, 0x304E, 0x3050, 0x3052, 0x3054, 0x3056, 0x3058, 0x305A, 0x305C, 0x305E, 0x3060, 0x3062, 0x3065, 0x3067, 0x3069, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3070, 0x3073, 0x3076, 0x30D9, 0x307C, 0x3000, 0x30D1, 0x30D4, 0x30D7, 0x30DD, 0x3071, 0x3074, 0x3077, 0x30DA, 0x307D, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x0000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F2, 0x30F3, 0x30C3, 0x30E3, 0x30E5, 0x30E7, 0x30A3, 0x3042, 0x3044, 0x3046, 0x3048, 0x304A, 0x304B, 0x304D, 0x304F, 0x3051, 0x3053, 0x3055, 0x3057, 0x3059, 0x305B, 0x305D, 0x305F, 0x3061, 0x3064, 0x3066, 0x3068, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3072, 0x3075, 0x30D8, 0x307B, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3084, 0x3086, 0x3088, 0x3089, 0x30EA, 0x308B, 0x308C, 0x308D, 0x308F, 0x3092, 0x3093, 0x3063, 0x3083, 0x3085, 0x3087, 0x30FC, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x30A1, 0x30A5, 0x30A7, 0x3000, 0x3000, 0x3000, 0x2642, 0x3000, 0x3000, 0x3000, 0x3000, 0x30A9, 0x2640, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000 };
private static readonly Dictionary RBY2U_U = new Dictionary{
{0x50, "\0"},
{0x5D, "TRAINER"},
{0x7F, " "},
{0x80, "A"},
{0x81, "B"},
{0x82, "C"},
{0x83, "D"},
{0x84, "E"},
{0x85, "F"},
{0x86, "G"},
{0x87, "H"},
{0x88, "I"},
{0x89, "J"},
{0x8A, "K"},
{0x8B, "L"},
{0x8C, "M"},
{0x8D, "N"},
{0x8E, "O"},
{0x8F, "P"},
{0x90, "Q"},
{0x91, "R"},
{0x92, "S"},
{0x93, "T"},
{0x94, "U"},
{0x95, "V"},
{0x96, "W"},
{0x97, "X"},
{0x98, "Y"},
{0x99, "Z"},
{0x9A, "("},
{0x9B, ")"},
{0x9C, ":"},
{0x9D, ";"},
{0x9E, "["},
{0x9F, "]"},
{0xA0, "a"},
{0xA1, "b"},
{0xA2, "c"},
{0xA3, "d"},
{0xA4, "e"},
{0xA5, "f"},
{0xA6, "g"},
{0xA7, "h"},
{0xA8, "i"},
{0xA9, "j"},
{0xAA, "k"},
{0xAB, "l"},
{0xAC, "m"},
{0xAD, "n"},
{0xAE, "o"},
{0xAF, "p"},
{0xB0, "q"},
{0xB1, "r"},
{0xB2, "s"},
{0xB3, "t"},
{0xB4, "u"},
{0xB5, "v"},
{0xB6, "w"},
{0xB7, "x"},
{0xB8, "y"},
{0xB9, "z"},
{0xC0, "Ä"},
{0xC1, "Ö"},
{0xC2, "Ü"},
{0xC3, "ä"},
{0xC4, "ö"},
{0xC5, "ü"},
{0xE0, "’"},
{0xE1, "{"}, /* Pk */
{0xE2, "}"}, /* Mn */
{0xE3, "-"},
{0xE6, "?"},
{0xE7, "!"},
{0xE8, "."}, // Alias decimal point to .
{0xEF, "♂"},
{0xF1, "×"},
{0xF2, "."},
{0xF3, "/"},
{0xF4, ","},
{0xF5, "♀"},
{0xF6, "0"},
{0xF7, "1"},
{0xF8, "2"},
{0xF9, "3"},
{0xFA, "4"},
{0xFB, "5"},
{0xFC, "6"},
{0xFD, "7"},
{0xFE, "8"},
{0xFF, "9"}
};
private static readonly Dictionary RBY2U_J = new Dictionary {
{0x05, "ガ"},
{0x06, "ギ"},
{0x07, "グ"},
{0x08, "ゲ"},
{0x09, "ゴ"},
{0x0A, "ザ"},
{0x0B, "ジ"},
{0x0C, "ズ"},
{0x0D, "ゼ"},
{0x0E, "ゾ"},
{0x0F, "ダ"},
{0x10, "ヂ"},
{0x11, "ヅ"},
{0x12, "デ"},
{0x13, "ド"},
{0x19, "バ"},
{0x1A, "ビ"},
{0x1B, "ブ"},
{0x1C, "ボ"},
{0x26, "が"},
{0x27, "ぎ"},
{0x28, "ぐ"},
{0x29, "げ"},
{0x2A, "ご"},
{0x2B, "ざ"},
{0x2C, "じ"},
{0x2D, "ず"},
{0x2E, "ぜ"},
{0x2F, "ぞ"},
{0x30, "だ"},
{0x31, "ぢ"},
{0x32, "づ"},
{0x33, "で"},
{0x34, "ど"},
{0x3A, "ば"},
{0x3B, "び"},
{0x3C, "ぶ"},
{0x3D, "ベ"},
{0x3E, "ぼ"},
{0x40, "パ"},
{0x41, "ピ"},
{0x42, "プ"},
{0x43, "ポ"},
{0x44, "ぱ"},
{0x45, "ぴ"},
{0x46, "ぷ"},
{0x47, "ペ"},
{0x48, "ぽ"},
{0x50, "\0"},
{0x5D, "トレーナー"},
{0x7F, " "},
{0x80, "ア"},
{0x81, "イ"},
{0x82, "ウ"},
{0x83, "エ"},
{0x84, "オ"},
{0x85, "カ"},
{0x86, "キ"},
{0x87, "ク"},
{0x88, "ケ"},
{0x89, "コ"},
{0x8A, "サ"},
{0x8B, "シ"},
{0x8C, "ス"},
{0x8D, "セ"},
{0x8E, "ソ"},
{0x8F, "タ"},
{0x90, "チ"},
{0x91, "ツ"},
{0x92, "テ"},
{0x93, "ト"},
{0x94, "ナ"},
{0x95, "ニ"},
{0x96, "ヌ"},
{0x97, "ネ"},
{0x98, "ノ"},
{0x99, "ハ"},
{0x9A, "ヒ"},
{0x9B, "フ"},
{0x9C, "ホ"},
{0x9D, "マ"},
{0x9E, "ミ"},
{0x9F, "ム"},
{0xA0, "メ"},
{0xA1, "モ"},
{0xA2, "ヤ"},
{0xA3, "ユ"},
{0xA4, "ヨ"},
{0xA5, "ラ"},
{0xA6, "ル"},
{0xA7, "レ"},
{0xA8, "ロ"},
{0xA9, "ワ"},
{0xAA, "ヲ"},
{0xAB, "ン"},
{0xAC, "ッ"},
{0xAD, "ャ"},
{0xAE, "ュ"},
{0xAF, "ョ"},
{0xB0, "ィ"},
{0xB1, "あ"},
{0xB2, "い"},
{0xB3, "う"},
{0xB4, "え"},
{0xB5, "お"},
{0xB6, "か"},
{0xB7, "き"},
{0xB8, "く"},
{0xB9, "け"},
{0xBA, "こ"},
{0xBB, "さ"},
{0xBC, "し"},
{0xBD, "す"},
{0xBE, "せ"},
{0xBF, "そ"},
{0xC0, "た"},
{0xC1, "ち"},
{0xC2, "つ"},
{0xC3, "て"},
{0xC4, "と"},
{0xC5, "な"},
{0xC6, "に"},
{0xC7, "ぬ"},
{0xC8, "ね"},
{0xC9, "の"},
{0xCA, "は"},
{0xCB, "ひ"},
{0xCC, "ふ"},
{0xCD, "へ"},
{0xCE, "ほ"},
{0xCF, "ま"},
{0xD0, "み"},
{0xD1, "む"},
{0xD2, "め"},
{0xD3, "も"},
{0xD4, "や"},
{0xD5, "ゆ"},
{0xD6, "よ"},
{0xD7, "ら"},
{0xD8, "リ"},
{0xD9, "る"},
{0xDA, "れ"},
{0xDB, "ろ"},
{0xDC, "わ"},
{0xDD, "を"},
{0xDE, "ん"},
{0xDF, "っ"},
{0xE0, "ゃ"},
{0xE1, "ゅ"},
{0xE2, "ょ"},
{0xE3, "ー"},
{0xE6, "?"},
{0xE7, "!"},
{0xE9, "ァ"},
{0xEA, "ゥ"},
{0xEB, "ェ"},
{0xEF, "♂"},
{0xF4, "ォ"},
{0xF5, "♀"},
{0xF6, "0"},
{0xF7, "1"},
{0xF8, "2"},
{0xF9, "3"},
{0xFA, "4"},
{0xFB, "5"},
{0xFC, "6"},
{0xFD, "7"},
{0xFE, "8"},
{0xFF, "9"}
};
private static readonly Dictionary U2RBY_U = new Dictionary {
{"\0", 0x50},
{"TRAINER", 0x5D},
{" ", 0x7F},
{"A", 0x80},
{"B", 0x81},
{"C", 0x82},
{"D", 0x83},
{"E", 0x84},
{"F", 0x85},
{"G", 0x86},
{"H", 0x87},
{"I", 0x88},
{"J", 0x89},
{"K", 0x8A},
{"L", 0x8B},
{"M", 0x8C},
{"N", 0x8D},
{"O", 0x8E},
{"P", 0x8F},
{"Q", 0x90},
{"R", 0x91},
{"S", 0x92},
{"T", 0x93},
{"U", 0x94},
{"V", 0x95},
{"W", 0x96},
{"X", 0x97},
{"Y", 0x98},
{"Z", 0x99},
{"(", 0x9A},
{")", 0x9B},
{":", 0x9C},
{";", 0x9D},
{"[", 0x9E},
{"]", 0x9F},
{"a", 0xA0},
{"b", 0xA1},
{"c", 0xA2},
{"d", 0xA3},
{"e", 0xA4},
{"f", 0xA5},
{"g", 0xA6},
{"h", 0xA7},
{"i", 0xA8},
{"j", 0xA9},
{"k", 0xAA},
{"l", 0xAB},
{"m", 0xAC},
{"n", 0xAD},
{"o", 0xAE},
{"p", 0xAF},
{"q", 0xB0},
{"r", 0xB1},
{"s", 0xB2},
{"t", 0xB3},
{"u", 0xB4},
{"v", 0xB5},
{"w", 0xB6},
{"x", 0xB7},
{"y", 0xB8},
{"z", 0xB9},
{"Ä", 0xC0},
{"Ö", 0xC1},
{"Ü", 0xC2},
{"ä", 0xC3},
{"ö", 0xC4},
{"ü", 0xC5},
{"'", 0xE0}, // Alias ' to ’ for Farfetch'd
{"’", 0xE0},
{"{", 0xE1}, /* Pk */
{"}", 0xE2}, /* Mn */
{"-", 0xE3},
{"?", 0xE6},
{"!", 0xE7},
{"♂", 0xEF},
{"×", 0xF1},
{".", 0xF2},
{"/", 0xF3},
{",", 0xF4},
{"♀", 0xF5},
{"0", 0xF6},
{"1", 0xF7},
{"2", 0xF8},
{"3", 0xF9},
{"4", 0xFA},
{"5", 0xFB},
{"6", 0xFC},
{"7", 0xFD},
{"8", 0xFE},
{"9", 0xFF}
};
private static readonly Dictionary U2RBY_J = new Dictionary {
{"ガ", 0x05},
{"ギ", 0x06},
{"グ", 0x07},
{"ゲ", 0x08},
{"ゴ", 0x09},
{"ザ", 0x0A},
{"ジ", 0x0B},
{"ズ", 0x0C},
{"ゼ", 0x0D},
{"ゾ", 0x0E},
{"ダ", 0x0F},
{"ヂ", 0x10},
{"ヅ", 0x11},
{"デ", 0x12},
{"ド", 0x13},
{"バ", 0x19},
{"ビ", 0x1A},
{"ブ", 0x1B},
{"ボ", 0x1C},
{"が", 0x26},
{"ぎ", 0x27},
{"ぐ", 0x28},
{"げ", 0x29},
{"ご", 0x2A},
{"ざ", 0x2B},
{"じ", 0x2C},
{"ず", 0x2D},
{"ぜ", 0x2E},
{"ぞ", 0x2F},
{"だ", 0x30},
{"ぢ", 0x31},
{"づ", 0x32},
{"で", 0x33},
{"ど", 0x34},
{"ば", 0x3A},
{"び", 0x3B},
{"ぶ", 0x3C},
{"ベ", 0x3D},
{"べ", 0x3D},
{"ぼ", 0x3E},
{"パ", 0x40},
{"ピ", 0x41},
{"プ", 0x42},
{"ポ", 0x43},
{"ぱ", 0x44},
{"ぴ", 0x45},
{"ぷ", 0x46},
{"ぺ", 0x47},
{"ペ", 0x47},
{"ぽ", 0x48},
{"\0", 0x50},
{"トレーナー", 0x5D},
{" ", 0x7F},
{"ア", 0x80},
{"イ", 0x81},
{"ウ", 0x82},
{"エ", 0x83},
{"オ", 0x84},
{"カ", 0x85},
{"キ", 0x86},
{"ク", 0x87},
{"ケ", 0x88},
{"コ", 0x89},
{"サ", 0x8A},
{"シ", 0x8B},
{"ス", 0x8C},
{"セ", 0x8D},
{"ソ", 0x8E},
{"タ", 0x8F},
{"チ", 0x90},
{"ツ", 0x91},
{"テ", 0x92},
{"ト", 0x93},
{"ナ", 0x94},
{"ニ", 0x95},
{"ヌ", 0x96},
{"ネ", 0x97},
{"ノ", 0x98},
{"ハ", 0x99},
{"ヒ", 0x9A},
{"フ", 0x9B},
{"ホ", 0x9C},
{"マ", 0x9D},
{"ミ", 0x9E},
{"ム", 0x9F},
{"メ", 0xA0},
{"モ", 0xA1},
{"ヤ", 0xA2},
{"ユ", 0xA3},
{"ヨ", 0xA4},
{"ラ", 0xA5},
{"ル", 0xA6},
{"レ", 0xA7},
{"ロ", 0xA8},
{"ワ", 0xA9},
{"ヲ", 0xAA},
{"ン", 0xAB},
{"ッ", 0xAC},
{"ャ", 0xAD},
{"ュ", 0xAE},
{"ョ", 0xAF},
{"ィ", 0xB0},
{"あ", 0xB1},
{"い", 0xB2},
{"う", 0xB3},
{"え", 0xB4},
{"お", 0xB5},
{"か", 0xB6},
{"き", 0xB7},
{"く", 0xB8},
{"け", 0xB9},
{"こ", 0xBA},
{"さ", 0xBB},
{"し", 0xBC},
{"す", 0xBD},
{"せ", 0xBE},
{"そ", 0xBF},
{"た", 0xC0},
{"ち", 0xC1},
{"つ", 0xC2},
{"て", 0xC3},
{"と", 0xC4},
{"な", 0xC5},
{"に", 0xC6},
{"ぬ", 0xC7},
{"ね", 0xC8},
{"の", 0xC9},
{"は", 0xCA},
{"ひ", 0xCB},
{"ふ", 0xCC},
{"へ", 0xCD},
{"ヘ", 0xCD}, // Katakana ヘ => Hiragana へ
{"ほ", 0xCE},
{"ま", 0xCF},
{"み", 0xD0},
{"む", 0xD1},
{"め", 0xD2},
{"も", 0xD3},
{"や", 0xD4},
{"ゆ", 0xD5},
{"よ", 0xD6},
{"ら", 0xD7},
{"リ", 0xD8},
{"り", 0xD8},
{"る", 0xD9},
{"れ", 0xDA},
{"ろ", 0xDB},
{"わ", 0xDC},
{"を", 0xDD},
{"ん", 0xDE},
{"っ", 0xDF},
{"ゃ", 0xE0},
{"ゅ", 0xE1},
{"ょ", 0xE2},
{"ー", 0xE3},
{"?", 0xE6},
{"!", 0xE7},
{"ァ", 0xE9},
{"ゥ", 0xEA},
{"ェ", 0xEB},
{"♂", 0xEF},
{"ォ", 0xF4},
{"♀", 0xF5},
{"0", 0xF6},
{"1", 0xF7},
{"2", 0xF8},
{"3", 0xF9},
{"4", 0xFA},
{"5", 0xFB},
{"6", 0xFC},
{"7", 0xFD},
{"8", 0xFE},
{"9", 0xFF}
};
///
/// Checks if the input byte array is definitely of German origin (any ÄÖÜäöü)
///
/// Raw string bytes
/// Indication if the data is from a definitely-german string
public static bool IsG12German(IEnumerable data) => data.Any(z => z >= 0xC0 && z <= 0xC6);
///
/// Checks if the input byte array is definitely of German origin (any ÄÖÜäöü)
///
/// Input string
/// Indication if the data is from a definitely-german string
public static bool IsG12German(string data) => IsG12German(SetString1(data, data.Length, false));
#endregion
#region Gen 2 Korean Character Tables
private static readonly Dictionary U2GSC_KOR_0 = new Dictionary {
{"ㄱ", 0x00}, {"ㄴ", 0x01}, {"ㄷ", 0x02}, {"ㄹ", 0x03}, {"ㅁ", 0x04}, {"ㅂ", 0x05}, {"ㅅ", 0x06}, {"ㅇ", 0x07}, {"ㅈ", 0x08}, {"ㅊ", 0x09}, {"ㅋ", 0x0A}, {"ㅌ", 0x0B}, {"ㅍ", 0x0C}, {"ㅎ", 0x0D}, {"ㄲ", 0x0E}, {"ㄸ", 0x0F},
{"ㅃ", 0x10}, {"ㅆ", 0x11}, {"ㅉ", 0x12},
{"ㅏ", 0x20}, {"ㅑ", 0x21}, {"ㅓ", 0x22}, {"ㅕ", 0x23}, {"ㅗ", 0x24}, {"ㅛ", 0x25}, {"ㅜ", 0x26}, {"ㅠ", 0x27}, {"ㅡ", 0x28}, {"ㅣ", 0x29}, {"ㅐ", 0x2A}, {"ㅒ", 0x2B}, {"ㅔ", 0x2C}, {"ㅖ", 0x2D}, {"ㅘ", 0x2E}, {"ㅙ", 0x2F},
{"ㅚ", 0x30}, {"ㅝ", 0x31}, {"ㅞ", 0x32}, {"ㅟ", 0x33}, {"ㅢ", 0x34}, {"_", 0x3E}, {"—", 0x3F},
{"「", 0x60}, {"」", 0x61}, {"『", 0x62}, {"』", 0x63}, {"(", 0x64}, {")", 0x65}, {"!", 0x66}, {"?", 0x67}, {"-", 0x68}, {"~", 0x69}, {"⋯", 0x6A}, {",", 0x6B}, {".", 0x6C},
{"0", 0xF0}, {"1", 0xF1}, {"2", 0xF2}, {"3", 0xF3}, {"4", 0xF4}, {"5", 0xF5}, {"6", 0xF6}, {"7", 0xF7}, {"8", 0xF8}, {"9", 0xF9},
};
private static readonly Dictionary U2GSC_KOR_1 = new Dictionary {
{"가", 0x01}, {"각", 0x02}, {"간", 0x03}, {"갇", 0x04}, {"갈", 0x05}, {"갉", 0x06}, {"갊", 0x07}, {"감", 0x08}, {"갑", 0x09}, {"값", 0x0A}, {"갓", 0x0B}, {"갔", 0x0C}, {"강", 0x0D}, {"갖", 0x0E}, {"갗", 0x0F},
{"같", 0x10}, {"갚", 0x11}, {"갛", 0x12}, {"개", 0x13}, {"객", 0x14}, {"갠", 0x15}, {"갤", 0x16}, {"갬", 0x17}, {"갭", 0x18}, {"갯", 0x19}, {"갰", 0x1A}, {"갱", 0x1B}, {"갸", 0x1C}, {"갹", 0x1D}, {"갼", 0x1E}, {"걀", 0x1F},
{"걋", 0x20}, {"걍", 0x21}, {"걔", 0x22}, {"걘", 0x23}, {"걜", 0x24}, {"거", 0x25}, {"걱", 0x26}, {"건", 0x27}, {"걷", 0x28}, {"걸", 0x29}, {"걺", 0x2A}, {"검", 0x2B}, {"겁", 0x2C}, {"것", 0x2D}, {"겄", 0x2E}, {"겅", 0x2F},
{"겆", 0x30}, {"겉", 0x31}, {"겊", 0x32}, {"겋", 0x33}, {"게", 0x34}, {"겐", 0x35}, {"겔", 0x36}, {"겜", 0x37}, {"겝", 0x38}, {"겟", 0x39}, {"겠", 0x3A}, {"겡", 0x3B}, {"겨", 0x3C}, {"격", 0x3D}, {"겪", 0x3E}, {"견", 0x3F},
{"겯", 0x40}, {"결", 0x41}, {"겹", 0x42}, {"겸", 0x43}, {"겻", 0x44}, {"겼", 0x45}, {"경", 0x46}, {"곁", 0x47}, {"계", 0x48}, {"곈", 0x49}, {"곌", 0x4A}, {"곕", 0x4B}, {"곗", 0x4C}, {"고", 0x4D}, {"곡", 0x4E}, {"곤", 0x4F},
{"곧", 0x60}, {"골", 0x61}, {"곪", 0x62}, {"곬", 0x63}, {"곯", 0x64}, {"곰", 0x65}, {"곱", 0x66}, {"곳", 0x67}, {"공", 0x68}, {"곶", 0x69}, {"과", 0x6A}, {"곽", 0x6B}, {"관", 0x6C}, {"괄", 0x6D}, {"괆", 0x6E},
{"괌", 0x71}, {"괍", 0x72}, {"괏", 0x73}, {"광", 0x74}, {"괘", 0x75}, {"괜", 0x76}, {"괠", 0x77}, {"괩", 0x78}, {"괬", 0x79}, {"괭", 0x7A}, {"괴", 0x7B}, {"괵", 0x7C}, {"괸", 0x7D}, {"괼", 0x7E}, {"괻", 0x7F},
{"굅", 0x80}, {"굇", 0x81}, {"굉", 0x82}, {"교", 0x83}, {"굔", 0x84}, {"굘", 0x85}, {"굡", 0x86}, {"굣", 0x87}, {"구", 0x88}, {"국", 0x89}, {"군", 0x8A}, {"굳", 0x8B}, {"굴", 0x8C}, {"굵", 0x8D}, {"굶", 0x8E}, {"굻", 0x8F},
{"굼", 0x90}, {"굽", 0x91}, {"굿", 0x92}, {"궁", 0x93}, {"궂", 0x94}, {"궈", 0x95}, {"궉", 0x96}, {"권", 0x97}, {"궐", 0x98}, {"궜", 0x99}, {"궝", 0x9A}, {"궤", 0x9B}, {"궷", 0x9C}, {"귀", 0x9D}, {"귁", 0x9E}, {"귄", 0x9F},
{"귈", 0xA0}, {"귐", 0xA1}, {"귑", 0xA2}, {"귓", 0xA3}, {"규", 0xA4}, {"균", 0xA5}, {"귤", 0xA6}, {"그", 0xA7}, {"극", 0xA8}, {"근", 0xA9}, {"귿", 0xAA}, {"글", 0xAB}, {"긁", 0xAC}, {"금", 0xAD}, {"급", 0xAE}, {"긋", 0xAF},
{"긍", 0xB0}, {"긔", 0xB1}, {"기", 0xB2}, {"긱", 0xB3}, {"긴", 0xB4}, {"긷", 0xB5}, {"길", 0xB6}, {"긺", 0xB7}, {"김", 0xB8}, {"깁", 0xB9}, {"깃", 0xBA}, {"깅", 0xBB}, {"깆", 0xBC}, {"깊", 0xBD}, {"까", 0xBE}, {"깍", 0xBF},
{"깎", 0xC0}, {"깐", 0xC1}, {"깔", 0xC2}, {"깖", 0xC3}, {"깜", 0xC4}, {"깝", 0xC5}, {"깟", 0xC6}, {"깠", 0xC7}, {"깡", 0xC8}, {"깥", 0xC9}, {"깨", 0xCA}, {"깩", 0xCB}, {"깬", 0xCC}, {"깰", 0xCD}, {"깸", 0xCE},
{"깹", 0xD1}, {"깻", 0xD2}, {"깼", 0xD3}, {"깽", 0xD4}, {"꺄", 0xD5}, {"꺅", 0xD6}, {"꺌", 0xD7}, {"꺼", 0xD8}, {"꺽", 0xD9}, {"꺾", 0xDA}, {"껀", 0xDB}, {"껄", 0xDC}, {"껌", 0xDD}, {"껍", 0xDE}, {"껏", 0xDF},
{"껐", 0xE0}, {"껑", 0xE1}, {"께", 0xE2}, {"껙", 0xE3}, {"껜", 0xE4}, {"껨", 0xE5}, {"껫", 0xE6}, {"껭", 0xE7}, {"껴", 0xE8}, {"껸", 0xE9}, {"껼", 0xEA}, {"꼇", 0xEB}, {"꼈", 0xEC}, {"꼍", 0xED}, {"꼐", 0xEE}, {"꼬", 0xEF},
{"꼭", 0xF0}, {"꼰", 0xF1}, {"꼲", 0xF2}, {"꼴", 0xF3}, {"꼼", 0xF4}, {"꼽", 0xF5}, {"꼿", 0xF6}, {"꽁", 0xF7}, {"꽂", 0xF8}, {"꽃", 0xF9}, {"꽈", 0xFA}, {"꽉", 0xFB}, {"꽐", 0xFC}, {"꽜", 0xFD}, {"꽝", 0xFE}, {"꽤", 0xFF},
};
private static readonly Dictionary U2GSC_KOR_2 = new Dictionary {
{"꽥", 0x00}, {"꽹", 0x01}, {"꾀", 0x02}, {"꾄", 0x03}, {"꾈", 0x04}, {"꾐", 0x05}, {"꾑", 0x06}, {"꾕", 0x07}, {"꾜", 0x08}, {"꾸", 0x09}, {"꾹", 0x0A}, {"꾼", 0x0B}, {"꿀", 0x0C}, {"꿇", 0x0D}, {"꿈", 0x0E}, {"꿉", 0x0F},
{"꿋", 0x10}, {"꿍", 0x11}, {"꿎", 0x12}, {"꿔", 0x13}, {"꿜", 0x14}, {"꿨", 0x15}, {"꿩", 0x16}, {"꿰", 0x17}, {"꿱", 0x18}, {"꿴", 0x19}, {"꿸", 0x1A}, {"뀀", 0x1B}, {"뀁", 0x1C}, {"뀄", 0x1D}, {"뀌", 0x1E}, {"뀐", 0x1F},
{"뀔", 0x20}, {"뀜", 0x21}, {"뀝", 0x22}, {"뀨", 0x23}, {"끄", 0x24}, {"끅", 0x25}, {"끈", 0x26}, {"끊", 0x27}, {"끌", 0x28}, {"끎", 0x29}, {"끓", 0x2A}, {"끔", 0x2B}, {"끕", 0x2C}, {"끗", 0x2D}, {"끙", 0x2E},
{"끝", 0x31}, {"끼", 0x32}, {"끽", 0x33}, {"낀", 0x34}, {"낄", 0x35}, {"낌", 0x36}, {"낍", 0x37}, {"낏", 0x38}, {"낑", 0x39}, {"나", 0x3A}, {"낙", 0x3B}, {"낚", 0x3C}, {"난", 0x3D}, {"낟", 0x3E}, {"날", 0x3F},
{"낡", 0x40}, {"낢", 0x41}, {"남", 0x42}, {"납", 0x43}, {"낫", 0x44}, {"났", 0x45}, {"낭", 0x46}, {"낮", 0x47}, {"낯", 0x48}, {"낱", 0x49}, {"낳", 0x4A}, {"내", 0x4B}, {"낵", 0x4C}, {"낸", 0x4D}, {"낼", 0x4E}, {"냄", 0x4F},
{"냅", 0x60}, {"냇", 0x61}, {"냈", 0x62}, {"냉", 0x63}, {"냐", 0x64}, {"냑", 0x65}, {"냔", 0x66}, {"냘", 0x67}, {"냠", 0x68}, {"냥", 0x69}, {"너", 0x6A}, {"넉", 0x6B}, {"넋", 0x6C}, {"넌", 0x6D}, {"널", 0x6E}, {"넒", 0x6F},
{"넓", 0x70}, {"넘", 0x71}, {"넙", 0x72}, {"넛", 0x73}, {"넜", 0x74}, {"넝", 0x75}, {"넣", 0x76}, {"네", 0x77}, {"넥", 0x78}, {"넨", 0x79}, {"넬", 0x7A}, {"넴", 0x7B}, {"넵", 0x7C}, {"넷", 0x7D}, {"넸", 0x7E}, {"넹", 0x7F},
{"녀", 0x80}, {"녁", 0x81}, {"년", 0x82}, {"녈", 0x83}, {"념", 0x84}, {"녑", 0x85}, {"녔", 0x86}, {"녕", 0x87}, {"녘", 0x88}, {"녜", 0x89}, {"녠", 0x8A}, {"노", 0x8B}, {"녹", 0x8C}, {"논", 0x8D}, {"놀", 0x8E}, {"놂", 0x8F},
{"놈", 0x90}, {"놉", 0x91}, {"놋", 0x92}, {"농", 0x93}, {"높", 0x94}, {"놓", 0x95}, {"놔", 0x96}, {"놘", 0x97}, {"놜", 0x98}, {"놨", 0x99}, {"뇌", 0x9A}, {"뇐", 0x9B}, {"뇔", 0x9C}, {"뇜", 0x9D}, {"뇝", 0x9E},
{"뇟", 0xA1}, {"뇨", 0xA2}, {"뇩", 0xA3}, {"뇬", 0xA4}, {"뇰", 0xA5}, {"뇹", 0xA6}, {"뇻", 0xA7}, {"뇽", 0xA8}, {"누", 0xA9}, {"눅", 0xAA}, {"눈", 0xAB}, {"눋", 0xAC}, {"눌", 0xAD}, {"눔", 0xAE}, {"눕", 0xAF},
{"눗", 0xB0}, {"눙", 0xB1}, {"눠", 0xB2}, {"눴", 0xB3}, {"눼", 0xB4}, {"뉘", 0xB5}, {"뉜", 0xB6}, {"뉠", 0xB7}, {"뉨", 0xB8}, {"뉩", 0xB9}, {"뉴", 0xBA}, {"뉵", 0xBB}, {"뉼", 0xBC}, {"늄", 0xBD}, {"늅", 0xBE}, {"늉", 0xBF},
{"느", 0xC0}, {"늑", 0xC1}, {"는", 0xC2}, {"늘", 0xC3}, {"늙", 0xC4}, {"늚", 0xC5}, {"늠", 0xC6}, {"늡", 0xC7}, {"늣", 0xC8}, {"능", 0xC9}, {"늦", 0xCA}, {"늪", 0xCB}, {"늬", 0xCC}, {"늰", 0xCD}, {"늴", 0xCE}, {"니", 0xCF},
{"닉", 0xD0}, {"닌", 0xD1}, {"닐", 0xD2}, {"닒", 0xD3}, {"님", 0xD4}, {"닙", 0xD5}, {"닛", 0xD6}, {"닝", 0xD7}, {"닢", 0xD8}, {"다", 0xD9}, {"닥", 0xDA}, {"닦", 0xDB}, {"단", 0xDC}, {"닫", 0xDD}, {"달", 0xDE}, {"닭", 0xDF},
{"닮", 0xE0}, {"닯", 0xE1}, {"닳", 0xE2}, {"담", 0xE3}, {"답", 0xE4}, {"닷", 0xE5}, {"닸", 0xE6}, {"당", 0xE7}, {"닺", 0xE8}, {"닻", 0xE9}, {"닿", 0xEA}, {"대", 0xEB}, {"댁", 0xEC}, {"댄", 0xED}, {"댈", 0xEE}, {"댐", 0xEF},
{"댑", 0xF0}, {"댓", 0xF1}, {"댔", 0xF2}, {"댕", 0xF3}, {"더", 0xF5}, {"덕", 0xF6}, {"덖", 0xF7}, {"던", 0xF8}, {"덛", 0xF9}, {"덜", 0xFA}, {"덞", 0xFB}, {"덟", 0xFC}, {"덤", 0xFD}, {"덥", 0xFE},
};
private static readonly Dictionary U2GSC_KOR_3 = new Dictionary {
{"덧", 0x01}, {"덩", 0x02}, {"덫", 0x03}, {"덮", 0x04}, {"데", 0x05}, {"덱", 0x06}, {"덴", 0x07}, {"델", 0x08}, {"뎀", 0x09}, {"뎁", 0x0A}, {"뎃", 0x0B}, {"뎄", 0x0C}, {"뎅", 0x0D}, {"뎌", 0x0E}, {"뎐", 0x0F},
{"뎔", 0x10}, {"뎠", 0x11}, {"뎡", 0x12}, {"뎨", 0x13}, {"뎬", 0x14}, {"도", 0x15}, {"독", 0x16}, {"돈", 0x17}, {"돋", 0x18}, {"돌", 0x19}, {"돎", 0x1A}, {"돔", 0x1C}, {"돕", 0x1D}, {"돗", 0x1E}, {"동", 0x1F},
{"돛", 0x20}, {"돝", 0x21}, {"돠", 0x22}, {"돤", 0x23}, {"돨", 0x24}, {"돼", 0x25}, {"됐", 0x26}, {"되", 0x27}, {"된", 0x28}, {"될", 0x29}, {"됨", 0x2A}, {"됩", 0x2B}, {"됫", 0x2C}, {"됴", 0x2D}, {"두", 0x2E}, {"둑", 0x2F},
{"둔", 0x30}, {"둘", 0x31}, {"둠", 0x32}, {"둡", 0x33}, {"둣", 0x34}, {"둥", 0x35}, {"둬", 0x36}, {"뒀", 0x37}, {"뒈", 0x38}, {"뒝", 0x39}, {"뒤", 0x3A}, {"뒨", 0x3B}, {"뒬", 0x3C}, {"뒵", 0x3D}, {"뒷", 0x3E}, {"뒹", 0x3F},
{"듀", 0x40}, {"듄", 0x41}, {"듈", 0x42}, {"듐", 0x43}, {"듕", 0x44}, {"드", 0x45}, {"득", 0x46}, {"든", 0x47}, {"듣", 0x48}, {"들", 0x49}, {"듦", 0x4A}, {"듬", 0x4B}, {"듭", 0x4C}, {"듯", 0x4D}, {"등", 0x4E}, {"듸", 0x4F},
{"디", 0x60}, {"딕", 0x61}, {"딘", 0x62}, {"딛", 0x63}, {"딜", 0x64}, {"딤", 0x65}, {"딥", 0x66}, {"딧", 0x67}, {"딨", 0x68}, {"딩", 0x69}, {"딪", 0x6A}, {"따", 0x6B}, {"딱", 0x6C}, {"딴", 0x6D}, {"딸", 0x6E},
{"땀", 0x71}, {"땁", 0x72}, {"땃", 0x73}, {"땄", 0x74}, {"땅", 0x75}, {"땋", 0x76}, {"때", 0x77}, {"땍", 0x78}, {"땐", 0x79}, {"땔", 0x7A}, {"땜", 0x7B}, {"땝", 0x7C}, {"땟", 0x7D}, {"땠", 0x7E}, {"땡", 0x7F},
{"떠", 0x80}, {"떡", 0x81}, {"떤", 0x82}, {"떨", 0x83}, {"떪", 0x84}, {"떫", 0x85}, {"떰", 0x86}, {"떱", 0x87}, {"떳", 0x88}, {"떴", 0x89}, {"떵", 0x8A}, {"떻", 0x8B}, {"떼", 0x8C}, {"떽", 0x8D}, {"뗀", 0x8E}, {"뗄", 0x8F},
{"뗌", 0x90}, {"뗍", 0x91}, {"뗏", 0x92}, {"뗐", 0x93}, {"뗑", 0x94}, {"뗘", 0x95}, {"뗬", 0x96}, {"또", 0x97}, {"똑", 0x98}, {"똔", 0x99}, {"똘", 0x9A}, {"똥", 0x9B}, {"똬", 0x9C}, {"똴", 0x9D}, {"뙈", 0x9E}, {"뙤", 0x9F},
{"뙨", 0xA0}, {"뚜", 0xA1}, {"뚝", 0xA2}, {"뚠", 0xA3}, {"뚤", 0xA4}, {"뚫", 0xA5}, {"뚬", 0xA6}, {"뚱", 0xA7}, {"뛔", 0xA8}, {"뛰", 0xA9}, {"뛴", 0xAA}, {"뛸", 0xAB}, {"뜀", 0xAC}, {"뜁", 0xAD}, {"뜅", 0xAE}, {"뜨", 0xAF},
{"뜩", 0xB0}, {"뜬", 0xB1}, {"뜯", 0xB2}, {"뜰", 0xB3}, {"뜸", 0xB4}, {"뜹", 0xB5}, {"뜻", 0xB6}, {"띄", 0xB7}, {"띈", 0xB8}, {"띌", 0xB9}, {"띔", 0xBA}, {"띕", 0xBB}, {"띠", 0xBC}, {"띤", 0xBD}, {"띨", 0xBE}, {"띰", 0xBF},
{"띱", 0xC0}, {"띳", 0xC1}, {"띵", 0xC2}, {"라", 0xC3}, {"락", 0xC4}, {"란", 0xC5}, {"랄", 0xC6}, {"람", 0xC7}, {"랍", 0xC8}, {"랏", 0xC9}, {"랐", 0xCA}, {"랑", 0xCB}, {"랒", 0xCC}, {"랖", 0xCD}, {"랗", 0xCE},
{"뢔", 0xD0}, {"래", 0xD1}, {"랙", 0xD2}, {"랜", 0xD3}, {"랠", 0xD4}, {"램", 0xD5}, {"랩", 0xD6}, {"랫", 0xD7}, {"랬", 0xD8}, {"랭", 0xD9}, {"랴", 0xDA}, {"략", 0xDB}, {"랸", 0xDC}, {"럇", 0xDD}, {"량", 0xDE}, {"러", 0xDF},
{"럭", 0xE0}, {"런", 0xE1}, {"럴", 0xE2}, {"럼", 0xE3}, {"럽", 0xE4}, {"럿", 0xE5}, {"렀", 0xE6}, {"렁", 0xE7}, {"렇", 0xE8}, {"레", 0xE9}, {"렉", 0xEA}, {"렌", 0xEB}, {"렐", 0xEC}, {"렘", 0xED}, {"렙", 0xEE}, {"렛", 0xEF},
{"렝", 0xF0}, {"려", 0xF1}, {"력", 0xF2}, {"련", 0xF3}, {"렬", 0xF4}, {"렴", 0xF5}, {"렵", 0xF6}, {"렷", 0xF7}, {"렸", 0xF8}, {"령", 0xF9}, {"례", 0xFA}, {"롄", 0xFB}, {"롑", 0xFC}, {"롓", 0xFD}, {"로", 0xFE}, {"록", 0xFF},
};
private static readonly Dictionary U2GSC_KOR_4 = new Dictionary {
{"론", 0x00}, {"롤", 0x01}, {"롬", 0x02}, {"롭", 0x03}, {"롯", 0x04}, {"롱", 0x05}, {"롸", 0x06}, {"롼", 0x07}, {"뢍", 0x08}, {"뢨", 0x09}, {"뢰", 0x0A}, {"뢴", 0x0B}, {"뢸", 0x0C}, {"룀", 0x0D}, {"룁", 0x0E}, {"룃", 0x0F},
{"룅", 0x10}, {"료", 0x11}, {"룐", 0x12}, {"룔", 0x13}, {"룝", 0x14}, {"룟", 0x15}, {"룡", 0x16}, {"루", 0x17}, {"룩", 0x18}, {"룬", 0x19}, {"룰", 0x1A}, {"룸", 0x1B}, {"룹", 0x1C}, {"룻", 0x1D}, {"룽", 0x1E}, {"뤄", 0x1F},
{"뤘", 0x20}, {"뤠", 0x21}, {"뤼", 0x22}, {"뤽", 0x23}, {"륀", 0x24}, {"륄", 0x25}, {"륌", 0x26}, {"륏", 0x27}, {"륑", 0x28}, {"류", 0x29}, {"륙", 0x2A}, {"륜", 0x2B}, {"률", 0x2C}, {"륨", 0x2D}, {"륩", 0x2E},
{"륫", 0x31}, {"륭", 0x32}, {"르", 0x33}, {"륵", 0x34}, {"른", 0x35}, {"를", 0x36}, {"름", 0x37}, {"릅", 0x38}, {"릇", 0x39}, {"릉", 0x3A}, {"릊", 0x3B}, {"릍", 0x3C}, {"릎", 0x3D}, {"리", 0x3E}, {"릭", 0x3F},
{"린", 0x40}, {"릴", 0x41}, {"림", 0x42}, {"립", 0x43}, {"릿", 0x44}, {"링", 0x45}, {"마", 0x46}, {"막", 0x47}, {"만", 0x48}, {"많", 0x49}, {"맏", 0x4A}, {"말", 0x4B}, {"맑", 0x4C}, {"맒", 0x4D}, {"맘", 0x4E}, {"맙", 0x4F},
{"맛", 0x60}, {"망", 0x61}, {"맞", 0x62}, {"맡", 0x63}, {"맣", 0x64}, {"매", 0x65}, {"맥", 0x66}, {"맨", 0x67}, {"맬", 0x68}, {"맴", 0x69}, {"맵", 0x6A}, {"맷", 0x6B}, {"맸", 0x6C}, {"맹", 0x6D}, {"맺", 0x6E}, {"먀", 0x6F},
{"먁", 0x70}, {"먈", 0x71}, {"먕", 0x72}, {"머", 0x73}, {"먹", 0x74}, {"먼", 0x75}, {"멀", 0x76}, {"멂", 0x77}, {"멈", 0x78}, {"멉", 0x79}, {"멋", 0x7A}, {"멍", 0x7B}, {"멎", 0x7C}, {"멓", 0x7D}, {"메", 0x7E}, {"멕", 0x7F},
{"멘", 0x80}, {"멜", 0x81}, {"멤", 0x82}, {"멥", 0x83}, {"멧", 0x84}, {"멨", 0x85}, {"멩", 0x86}, {"며", 0x87}, {"멱", 0x88}, {"면", 0x89}, {"멸", 0x8A}, {"몃", 0x8B}, {"몄", 0x8C}, {"명", 0x8D}, {"몇", 0x8E}, {"몌", 0x8F},
{"모", 0x90}, {"목", 0x91}, {"몫", 0x92}, {"몬", 0x93}, {"몰", 0x94}, {"몲", 0x95}, {"몸", 0x96}, {"몹", 0x97}, {"못", 0x98}, {"몽", 0x99}, {"뫄", 0x9A}, {"뫈", 0x9B}, {"뫘", 0x9C}, {"뫙", 0x9D}, {"뫼", 0x9E},
{"묀", 0xA1}, {"묄", 0xA2}, {"묍", 0xA3}, {"묏", 0xA4}, {"묑", 0xA5}, {"묘", 0xA6}, {"묜", 0xA7}, {"묠", 0xA8}, {"묩", 0xA9}, {"묫", 0xAA}, {"무", 0xAB}, {"묵", 0xAC}, {"묶", 0xAD}, {"문", 0xAE}, {"묻", 0xAF},
{"물", 0xB0}, {"묽", 0xB1}, {"묾", 0xB2}, {"뭄", 0xB3}, {"뭅", 0xB4}, {"뭇", 0xB5}, {"뭉", 0xB6}, {"뭍", 0xB7}, {"뭏", 0xB8}, {"뭐", 0xB9}, {"뭔", 0xBA}, {"뭘", 0xBB}, {"뭡", 0xBC}, {"뭣", 0xBD}, {"뭬", 0xBE}, {"뮈", 0xBF},
{"뮌", 0xC0}, {"뮐", 0xC1}, {"뮤", 0xC2}, {"뮨", 0xC3}, {"뮬", 0xC4}, {"뮴", 0xC5}, {"뮷", 0xC6}, {"므", 0xC7}, {"믄", 0xC8}, {"믈", 0xC9}, {"믐", 0xCA}, {"믓", 0xCB}, {"미", 0xCC}, {"믹", 0xCD}, {"민", 0xCE}, {"믿", 0xCF},
{"밀", 0xD0}, {"밂", 0xD1}, {"밈", 0xD2}, {"밉", 0xD3}, {"밋", 0xD4}, {"밌", 0xD5}, {"밍", 0xD6}, {"및", 0xD7}, {"밑", 0xD8}, {"바", 0xD9}, {"박", 0xDA}, {"밖", 0xDB}, {"밗", 0xDC}, {"반", 0xDD}, {"받", 0xDE}, {"발", 0xDF},
{"밝", 0xE0}, {"밞", 0xE1}, {"밟", 0xE2}, {"밤", 0xE3}, {"밥", 0xE4}, {"밧", 0xE5}, {"방", 0xE6}, {"밭", 0xE7}, {"배", 0xE8}, {"백", 0xE9}, {"밴", 0xEA}, {"밸", 0xEB}, {"뱀", 0xEC}, {"뱁", 0xED}, {"뱃", 0xEE}, {"뱄", 0xEF},
{"뱅", 0xF0}, {"뱉", 0xF1}, {"뱌", 0xF2}, {"뱍", 0xF3}, {"뱐", 0xF4}, {"뱝", 0xF5}, {"버", 0xF6}, {"벅", 0xF7}, {"번", 0xF8}, {"벋", 0xF9}, {"벌", 0xFA}, {"벎", 0xFB}, {"범", 0xFC}, {"법", 0xFD}, {"벗", 0xFE},
};
private static readonly Dictionary U2GSC_KOR_5 = new Dictionary {
{"벙", 0x01}, {"벚", 0x02}, {"베", 0x03}, {"벡", 0x04}, {"벤", 0x05}, {"벧", 0x06}, {"벨", 0x07}, {"벰", 0x08}, {"벱", 0x09}, {"벳", 0x0A}, {"벵", 0x0B}, {"벴", 0x0C}, {"벼", 0x0D}, {"벽", 0x0E}, {"변", 0x0F},
{"별", 0x10}, {"볍", 0x11}, {"볏", 0x12}, {"볐", 0x13}, {"병", 0x14}, {"볕", 0x15}, {"볘", 0x16}, {"볜", 0x17}, {"보", 0x18}, {"복", 0x19}, {"볶", 0x1A}, {"본", 0x1B}, {"볼", 0x1C}, {"봄", 0x1D}, {"봅", 0x1E}, {"봇", 0x1F},
{"봉", 0x20}, {"봐", 0x21}, {"봔", 0x22}, {"봤", 0x23}, {"봬", 0x24}, {"뵀", 0x25}, {"뵈", 0x26}, {"뵉", 0x27}, {"뵌", 0x28}, {"뵐", 0x29}, {"뵘", 0x2A}, {"뵙", 0x2B}, {"뵤", 0x2C}, {"뵨", 0x2D}, {"부", 0x2E}, {"북", 0x2F},
{"분", 0x30}, {"붇", 0x31}, {"불", 0x32}, {"붉", 0x33}, {"붊", 0x34}, {"붐", 0x35}, {"붑", 0x36}, {"붓", 0x37}, {"붕", 0x38}, {"붙", 0x39}, {"붚", 0x3A}, {"붜", 0x3B}, {"붤", 0x3C}, {"붰", 0x3D}, {"붸", 0x3E}, {"뷔", 0x3F},
{"뷕", 0x40}, {"뷘", 0x41}, {"뷜", 0x42}, {"뷩", 0x43}, {"뷰", 0x44}, {"뷴", 0x45}, {"뷸", 0x46}, {"븀", 0x47}, {"븃", 0x48}, {"븅", 0x49}, {"브", 0x4A}, {"븍", 0x4B}, {"븐", 0x4C}, {"블", 0x4D}, {"븜", 0x4E}, {"븝", 0x4F},
{"븟", 0x60}, {"비", 0x61}, {"빅", 0x62}, {"빈", 0x63}, {"빌", 0x64}, {"빎", 0x65}, {"빔", 0x66}, {"빕", 0x67}, {"빗", 0x68}, {"빙", 0x69}, {"빚", 0x6A}, {"빛", 0x6B}, {"빠", 0x6C}, {"빡", 0x6D}, {"빤", 0x6E},
{"빨", 0x71}, {"빪", 0x72}, {"빰", 0x73}, {"빱", 0x74}, {"빳", 0x75}, {"빴", 0x76}, {"빵", 0x77}, {"빻", 0x78}, {"빼", 0x79}, {"빽", 0x7A}, {"뺀", 0x7B}, {"뺄", 0x7C}, {"뺌", 0x7D}, {"뺍", 0x7E}, {"뺏", 0x7F},
{"뺐", 0x80}, {"뺑", 0x81}, {"뺘", 0x82}, {"뺙", 0x83}, {"뺨", 0x84}, {"뻐", 0x85}, {"뻑", 0x86}, {"뻔", 0x87}, {"뻗", 0x88}, {"뻘", 0x89}, {"뻠", 0x8A}, {"뻣", 0x8B}, {"뻤", 0x8C}, {"뻥", 0x8D}, {"뻬", 0x8E}, {"뼁", 0x8F},
{"뼈", 0x90}, {"뼉", 0x91}, {"뼘", 0x92}, {"뼙", 0x93}, {"뼛", 0x94}, {"뼜", 0x95}, {"뼝", 0x96}, {"뽀", 0x97}, {"뽁", 0x98}, {"뽄", 0x99}, {"뽈", 0x9A}, {"뽐", 0x9B}, {"뽑", 0x9C}, {"뽕", 0x9D}, {"뾔", 0x9E}, {"뾰", 0x9F},
{"뿅", 0xA0}, {"뿌", 0xA1}, {"뿍", 0xA2}, {"뿐", 0xA3}, {"뿔", 0xA4}, {"뿜", 0xA5}, {"뿟", 0xA6}, {"뿡", 0xA7}, {"쀼", 0xA8}, {"쁑", 0xA9}, {"쁘", 0xAA}, {"쁜", 0xAB}, {"쁠", 0xAC}, {"쁨", 0xAD}, {"쁩", 0xAE}, {"삐", 0xAF},
{"삑", 0xB0}, {"삔", 0xB1}, {"삘", 0xB2}, {"삠", 0xB3}, {"삡", 0xB4}, {"삣", 0xB5}, {"삥", 0xB6}, {"사", 0xB7}, {"삭", 0xB8}, {"삯", 0xB9}, {"산", 0xBA}, {"삳", 0xBB}, {"살", 0xBC}, {"삵", 0xBD}, {"삶", 0xBE}, {"삼", 0xBF},
{"삽", 0xC0}, {"삿", 0xC1}, {"샀", 0xC2}, {"상", 0xC3}, {"샅", 0xC4}, {"새", 0xC5}, {"색", 0xC6}, {"샌", 0xC7}, {"샐", 0xC8}, {"샘", 0xC9}, {"샙", 0xCA}, {"샛", 0xCB}, {"샜", 0xCC}, {"생", 0xCD}, {"샤", 0xCE},
{"샥", 0xD1}, {"샨", 0xD2}, {"샬", 0xD3}, {"샴", 0xD4}, {"샵", 0xD5}, {"샷", 0xD6}, {"샹", 0xD7}, {"섀", 0xD8}, {"섄", 0xD9}, {"섈", 0xDA}, {"섐", 0xDB}, {"섕", 0xDC}, {"서", 0xDD}, {"석", 0xDE}, {"섞", 0xDF},
{"섟", 0xE0}, {"선", 0xE1}, {"섣", 0xE2}, {"설", 0xE3}, {"섦", 0xE4}, {"섧", 0xE5}, {"섬", 0xE6}, {"섭", 0xE7}, {"섯", 0xE8}, {"섰", 0xE9}, {"성", 0xEA}, {"섶", 0xEB}, {"세", 0xEC}, {"섹", 0xED}, {"센", 0xEE}, {"셀", 0xEF},
{"셈", 0xF0}, {"셉", 0xF1}, {"셋", 0xF2}, {"셌", 0xF3}, {"셍", 0xF4}, {"셔", 0xF5}, {"셕", 0xF6}, {"션", 0xF7}, {"셜", 0xF8}, {"셤", 0xF9}, {"셥", 0xFA}, {"셧", 0xFB}, {"셨", 0xFC}, {"셩", 0xFD}, {"셰", 0xFE}, {"셴", 0xFF},
};
private static readonly Dictionary U2GSC_KOR_6 = new Dictionary {
{"셸", 0x00}, {"솅", 0x01}, {"소", 0x02}, {"속", 0x03}, {"솎", 0x04}, {"손", 0x05}, {"솔", 0x06}, {"솖", 0x07}, {"솜", 0x08}, {"솝", 0x09}, {"솟", 0x0A}, {"송", 0x0B}, {"솥", 0x0C}, {"솨", 0x0D}, {"솩", 0x0E}, {"솬", 0x0F},
{"솰", 0x10}, {"솽", 0x11}, {"쇄", 0x12}, {"쇈", 0x13}, {"쇌", 0x14}, {"쇔", 0x15}, {"쇗", 0x16}, {"쇘", 0x17}, {"쇠", 0x18}, {"쇤", 0x19}, {"쇨", 0x1A}, {"쇰", 0x1B}, {"쇱", 0x1C}, {"쇳", 0x1D}, {"쇼", 0x1E}, {"쇽", 0x1F},
{"숀", 0x20}, {"숄", 0x21}, {"숌", 0x22}, {"숍", 0x23}, {"숏", 0x24}, {"숑", 0x25}, {"수", 0x26}, {"숙", 0x27}, {"순", 0x28}, {"숟", 0x29}, {"술", 0x2A}, {"숨", 0x2B}, {"숩", 0x2C}, {"숫", 0x2D}, {"숭", 0x2E}, {"쌰", 0x2F},
{"쎼", 0x30}, {"숯", 0x31}, {"숱", 0x32}, {"숲", 0x33}, {"숴", 0x34}, {"쉈", 0x35}, {"쉐", 0x36}, {"쉑", 0x37}, {"쉔", 0x38}, {"쉘", 0x39}, {"쉠", 0x3A}, {"쉥", 0x3B}, {"쉬", 0x3C}, {"쉭", 0x3D}, {"쉰", 0x3E}, {"쉴", 0x3F},
{"쉼", 0x40}, {"쉽", 0x41}, {"쉿", 0x42}, {"슁", 0x43}, {"슈", 0x44}, {"슉", 0x45}, {"슐", 0x46}, {"슘", 0x47}, {"슛", 0x48}, {"슝", 0x49}, {"스", 0x4A}, {"슥", 0x4B}, {"슨", 0x4C}, {"슬", 0x4D}, {"슭", 0x4E}, {"슴", 0x4F},
{"습", 0x60}, {"슷", 0x61}, {"승", 0x62}, {"시", 0x63}, {"식", 0x64}, {"신", 0x65}, {"싣", 0x66}, {"실", 0x67}, {"싫", 0x68}, {"심", 0x69}, {"십", 0x6A}, {"싯", 0x6B}, {"싱", 0x6C}, {"싶", 0x6D}, {"싸", 0x6E}, {"싹", 0x6F},
{"싻", 0x70}, {"싼", 0x71}, {"쌀", 0x72}, {"쌈", 0x73}, {"쌉", 0x74}, {"쌌", 0x75}, {"쌍", 0x76}, {"쌓", 0x77}, {"쌔", 0x78}, {"쌕", 0x79}, {"쌘", 0x7A}, {"쌜", 0x7B}, {"쌤", 0x7C}, {"쌥", 0x7D}, {"쌨", 0x7E}, {"쌩", 0x7F},
{"썅", 0x80}, {"써", 0x81}, {"썩", 0x82}, {"썬", 0x83}, {"썰", 0x84}, {"썲", 0x85}, {"썸", 0x86}, {"썹", 0x87}, {"썼", 0x88}, {"썽", 0x89}, {"쎄", 0x8A}, {"쎈", 0x8B}, {"쎌", 0x8C}, {"쏀", 0x8D}, {"쏘", 0x8E}, {"쏙", 0x8F},
{"쏜", 0x90}, {"쏟", 0x91}, {"쏠", 0x92}, {"쏢", 0x93}, {"쏨", 0x94}, {"쏩", 0x95}, {"쏭", 0x96}, {"쏴", 0x97}, {"쏵", 0x98}, {"쏸", 0x99}, {"쐈", 0x9A}, {"쐐", 0x9B}, {"쐤", 0x9C}, {"쐬", 0x9D}, {"쐰", 0x9E},
{"쓔", 0xA0}, {"쐴", 0xA1}, {"쐼", 0xA2}, {"쐽", 0xA3}, {"쑈", 0xA4}, {"쑤", 0xA5}, {"쑥", 0xA6}, {"쑨", 0xA7}, {"쑬", 0xA8}, {"쑴", 0xA9}, {"쑵", 0xAA}, {"쑹", 0xAB}, {"쒀", 0xAC}, {"쒔", 0xAD}, {"쒜", 0xAE}, {"쒸", 0xAF},
{"쒼", 0xB0}, {"쓩", 0xB1}, {"쓰", 0xB2}, {"쓱", 0xB3}, {"쓴", 0xB4}, {"쓸", 0xB5}, {"쓺", 0xB6}, {"쓿", 0xB7}, {"씀", 0xB8}, {"씁", 0xB9}, {"씌", 0xBA}, {"씐", 0xBB}, {"씔", 0xBC}, {"씜", 0xBD}, {"씨", 0xBE}, {"씩", 0xBF},
{"씬", 0xC0}, {"씰", 0xC1}, {"씸", 0xC2}, {"씹", 0xC3}, {"씻", 0xC4}, {"씽", 0xC5}, {"아", 0xC6}, {"악", 0xC7}, {"안", 0xC8}, {"앉", 0xC9}, {"않", 0xCA}, {"알", 0xCB}, {"앍", 0xCC}, {"앎", 0xCD}, {"앓", 0xCE}, {"암", 0xCF},
{"압", 0xD0}, {"앗", 0xD1}, {"았", 0xD2}, {"앙", 0xD3}, {"앝", 0xD4}, {"앞", 0xD5}, {"애", 0xD6}, {"액", 0xD7}, {"앤", 0xD8}, {"앨", 0xD9}, {"앰", 0xDA}, {"앱", 0xDB}, {"앳", 0xDC}, {"앴", 0xDD}, {"앵", 0xDE}, {"야", 0xDF},
{"약", 0xE0}, {"얀", 0xE1}, {"얄", 0xE2}, {"얇", 0xE3}, {"얌", 0xE4}, {"얍", 0xE5}, {"얏", 0xE6}, {"양", 0xE7}, {"얕", 0xE8}, {"얗", 0xE9}, {"얘", 0xEA}, {"얜", 0xEB}, {"얠", 0xEC}, {"얩", 0xED}, {"어", 0xEE}, {"억", 0xEF},
{"언", 0xF0}, {"얹", 0xF1}, {"얻", 0xF2}, {"얼", 0xF3}, {"얽", 0xF4}, {"얾", 0xF5}, {"엄", 0xF6}, {"업", 0xF7}, {"없", 0xF8}, {"엇", 0xF9}, {"었", 0xFA}, {"엉", 0xFB}, {"엊", 0xFC}, {"엌", 0xFD}, {"엎", 0xFE},
};
private static readonly Dictionary U2GSC_KOR_7 = new Dictionary {
{"에", 0x01}, {"엑", 0x02}, {"엔", 0x03}, {"엘", 0x04}, {"엠", 0x05}, {"엡", 0x06}, {"엣", 0x07}, {"엥", 0x08}, {"여", 0x09}, {"역", 0x0A}, {"엮", 0x0B}, {"연", 0x0C}, {"열", 0x0D}, {"엶", 0x0E}, {"엷", 0x0F},
{"염", 0x10}, {"엽", 0x11}, {"엾", 0x12}, {"엿", 0x13}, {"였", 0x14}, {"영", 0x15}, {"옅", 0x16}, {"옆", 0x17}, {"옇", 0x18}, {"예", 0x19}, {"옌", 0x1A}, {"옐", 0x1B}, {"옘", 0x1C}, {"옙", 0x1D}, {"옛", 0x1E}, {"옜", 0x1F},
{"오", 0x20}, {"옥", 0x21}, {"온", 0x22}, {"올", 0x23}, {"옭", 0x24}, {"옮", 0x25}, {"옰", 0x26}, {"옳", 0x27}, {"옴", 0x28}, {"옵", 0x29}, {"옷", 0x2A}, {"옹", 0x2B}, {"옻", 0x2C}, {"와", 0x2D}, {"왁", 0x2E}, {"완", 0x2F},
{"왈", 0x30}, {"왐", 0x31}, {"왑", 0x32}, {"왓", 0x33}, {"왔", 0x34}, {"왕", 0x35}, {"왜", 0x36}, {"왝", 0x37}, {"왠", 0x38}, {"왬", 0x39}, {"왯", 0x3A}, {"왱", 0x3B}, {"외", 0x3C}, {"왹", 0x3D}, {"왼", 0x3E}, {"욀", 0x3F},
{"욈", 0x40}, {"욉", 0x41}, {"욋", 0x42}, {"욍", 0x43}, {"요", 0x44}, {"욕", 0x45}, {"욘", 0x46}, {"욜", 0x47}, {"욤", 0x48}, {"욥", 0x49}, {"욧", 0x4A}, {"용", 0x4B}, {"우", 0x4C}, {"욱", 0x4D}, {"운", 0x4E}, {"울", 0x4F},
{"욹", 0x60}, {"욺", 0x61}, {"움", 0x62}, {"웁", 0x63}, {"웃", 0x64}, {"웅", 0x65}, {"워", 0x66}, {"웍", 0x67}, {"원", 0x68}, {"월", 0x69}, {"웜", 0x6A}, {"웝", 0x6B}, {"웠", 0x6C}, {"웡", 0x6D}, {"웨", 0x6E},
{"웩", 0x71}, {"웬", 0x72}, {"웰", 0x73}, {"웸", 0x74}, {"웹", 0x75}, {"웽", 0x76}, {"위", 0x77}, {"윅", 0x78}, {"윈", 0x79}, {"윌", 0x7A}, {"윔", 0x7B}, {"윕", 0x7C}, {"윗", 0x7D}, {"윙", 0x7E}, {"유", 0x7F},
{"육", 0x80}, {"윤", 0x81}, {"율", 0x82}, {"윰", 0x83}, {"윱", 0x84}, {"윳", 0x85}, {"융", 0x86}, {"윷", 0x87}, {"으", 0x88}, {"윽", 0x89}, {"은", 0x8A}, {"을", 0x8B}, {"읆", 0x8C}, {"음", 0x8D}, {"읍", 0x8E}, {"읏", 0x8F},
{"응", 0x90}, {"읒", 0x91}, {"읓", 0x92}, {"읔", 0x93}, {"읕", 0x94}, {"읖", 0x95}, {"읗", 0x96}, {"의", 0x97}, {"읜", 0x98}, {"읠", 0x99}, {"읨", 0x9A}, {"읫", 0x9B}, {"이", 0x9C}, {"익", 0x9D}, {"인", 0x9E}, {"일", 0x9F},
{"읽", 0xA0}, {"읾", 0xA1}, {"잃", 0xA2}, {"임", 0xA3}, {"입", 0xA4}, {"잇", 0xA5}, {"있", 0xA6}, {"잉", 0xA7}, {"잊", 0xA8}, {"잎", 0xA9}, {"자", 0xAA}, {"작", 0xAB}, {"잔", 0xAC}, {"잖", 0xAD}, {"잗", 0xAE}, {"잘", 0xAF},
{"잚", 0xB0}, {"잠", 0xB1}, {"잡", 0xB2}, {"잣", 0xB3}, {"잤", 0xB4}, {"장", 0xB5}, {"잦", 0xB6}, {"재", 0xB7}, {"잭", 0xB8}, {"잰", 0xB9}, {"잴", 0xBA}, {"잼", 0xBB}, {"잽", 0xBC}, {"잿", 0xBD}, {"쟀", 0xBE}, {"쟁", 0xBF},
{"쟈", 0xC0}, {"쟉", 0xC1}, {"쟌", 0xC2}, {"쟎", 0xC3}, {"쟐", 0xC4}, {"쟘", 0xC5}, {"쟝", 0xC6}, {"쟤", 0xC7}, {"쟨", 0xC8}, {"쟬", 0xC9}, {"저", 0xCA}, {"적", 0xCB}, {"전", 0xCC}, {"절", 0xCD}, {"젊", 0xCE},
{"점", 0xD1}, {"접", 0xD2}, {"젓", 0xD3}, {"정", 0xD4}, {"젖", 0xD5}, {"제", 0xD6}, {"젝", 0xD7}, {"젠", 0xD8}, {"젤", 0xD9}, {"젬", 0xDA}, {"젭", 0xDB}, {"젯", 0xDC}, {"젱", 0xDD}, {"져", 0xDE}, {"젼", 0xDF},
{"졀", 0xE0}, {"졈", 0xE1}, {"졉", 0xE2}, {"졌", 0xE3}, {"졍", 0xE4}, {"졔", 0xE5}, {"조", 0xE6}, {"족", 0xE7}, {"존", 0xE8}, {"졸", 0xE9}, {"졺", 0xEA}, {"좀", 0xEB}, {"좁", 0xEC}, {"좃", 0xED}, {"종", 0xEE}, {"좆", 0xEF},
{"좇", 0xF0}, {"좋", 0xF1}, {"좌", 0xF2}, {"좍", 0xF3}, {"좔", 0xF4}, {"좝", 0xF5}, {"좟", 0xF6}, {"좡", 0xF7}, {"좨", 0xF8}, {"좼", 0xF9}, {"좽", 0xFA}, {"죄", 0xFB}, {"죈", 0xFC}, {"죌", 0xFD}, {"죔", 0xFE}, {"죕", 0xFF},
};
private static readonly Dictionary U2GSC_KOR_8 = new Dictionary {
{"죗", 0x00}, {"죙", 0x01}, {"죠", 0x02}, {"죡", 0x03}, {"죤", 0x04}, {"죵", 0x05}, {"주", 0x06}, {"죽", 0x07}, {"준", 0x08}, {"줄", 0x09}, {"줅", 0x0A}, {"줆", 0x0B}, {"줌", 0x0C}, {"줍", 0x0D}, {"줏", 0x0E}, {"중", 0x0F},
{"줘", 0x10}, {"줬", 0x11}, {"줴", 0x12}, {"쥐", 0x13}, {"쥑", 0x14}, {"쥔", 0x15}, {"쥘", 0x16}, {"쥠", 0x17}, {"쥡", 0x18}, {"쥣", 0x19}, {"쥬", 0x1A}, {"쥰", 0x1B}, {"쥴", 0x1C}, {"쥼", 0x1D}, {"즈", 0x1E}, {"즉", 0x1F},
{"즌", 0x20}, {"즐", 0x21}, {"즘", 0x22}, {"즙", 0x23}, {"즛", 0x24}, {"증", 0x25}, {"지", 0x26}, {"직", 0x27}, {"진", 0x28}, {"짇", 0x29}, {"질", 0x2A}, {"짊", 0x2B}, {"짐", 0x2C}, {"집", 0x2D}, {"짓", 0x2E},
{"쬬", 0x30}, {"징", 0x31}, {"짖", 0x32}, {"짙", 0x33}, {"짚", 0x34}, {"짜", 0x35}, {"짝", 0x36}, {"짠", 0x37}, {"짢", 0x38}, {"짤", 0x39}, {"짧", 0x3A}, {"짬", 0x3B}, {"짭", 0x3C}, {"짯", 0x3D}, {"짰", 0x3E}, {"짱", 0x3F},
{"째", 0x40}, {"짹", 0x41}, {"짼", 0x42}, {"쨀", 0x43}, {"쨈", 0x44}, {"쨉", 0x45}, {"쨋", 0x46}, {"쨌", 0x47}, {"쨍", 0x48}, {"쨔", 0x49}, {"쨘", 0x4A}, {"쨩", 0x4B}, {"쩌", 0x4C}, {"쩍", 0x4D}, {"쩐", 0x4E}, {"쩔", 0x4F},
{"쩜", 0x60}, {"쩝", 0x61}, {"쩟", 0x62}, {"쩠", 0x63}, {"쩡", 0x64}, {"쩨", 0x65}, {"쩽", 0x66}, {"쪄", 0x67}, {"쪘", 0x68}, {"쪼", 0x69}, {"쪽", 0x6A}, {"쫀", 0x6B}, {"쫄", 0x6C}, {"쫌", 0x6D}, {"쫍", 0x6E}, {"쫏", 0x6F},
{"쫑", 0x70}, {"쫓", 0x71}, {"쫘", 0x72}, {"쫙", 0x73}, {"쫠", 0x74}, {"쫬", 0x75}, {"쫴", 0x76}, {"쬈", 0x77}, {"쬐", 0x78}, {"쬔", 0x79}, {"쬘", 0x7A}, {"쬠", 0x7B}, {"쬡", 0x7C}, {"쭁", 0x7D}, {"쭈", 0x7E}, {"쭉", 0x7F},
{"쭌", 0x80}, {"쭐", 0x81}, {"쭘", 0x82}, {"쭙", 0x83}, {"쭝", 0x84}, {"쭤", 0x85}, {"쭸", 0x86}, {"쭹", 0x87}, {"쮜", 0x88}, {"쮸", 0x89}, {"쯔", 0x8A}, {"쯤", 0x8B}, {"쯧", 0x8C}, {"쯩", 0x8D}, {"찌", 0x8E}, {"찍", 0x8F},
{"찐", 0x90}, {"찔", 0x91}, {"찜", 0x92}, {"찝", 0x93}, {"찡", 0x94}, {"찢", 0x95}, {"찧", 0x96}, {"차", 0x97}, {"착", 0x98}, {"찬", 0x99}, {"찮", 0x9A}, {"찰", 0x9B}, {"참", 0x9C}, {"찹", 0x9D}, {"찻", 0x9E},
{"찼", 0xA1}, {"창", 0xA2}, {"찾", 0xA3}, {"채", 0xA4}, {"책", 0xA5}, {"챈", 0xA6}, {"챌", 0xA7}, {"챔", 0xA8}, {"챕", 0xA9}, {"챗", 0xAA}, {"챘", 0xAB}, {"챙", 0xAC}, {"챠", 0xAD}, {"챤", 0xAE}, {"챦", 0xAF},
{"챨", 0xB0}, {"챰", 0xB1}, {"챵", 0xB2}, {"처", 0xB3}, {"척", 0xB4}, {"천", 0xB5}, {"철", 0xB6}, {"첨", 0xB7}, {"첩", 0xB8}, {"첫", 0xB9}, {"첬", 0xBA}, {"청", 0xBB}, {"체", 0xBC}, {"첵", 0xBD}, {"첸", 0xBE}, {"첼", 0xBF},
{"쳄", 0xC0}, {"쳅", 0xC1}, {"쳇", 0xC2}, {"쳉", 0xC3}, {"쳐", 0xC4}, {"쳔", 0xC5}, {"쳤", 0xC6}, {"쳬", 0xC7}, {"쳰", 0xC8}, {"촁", 0xC9}, {"초", 0xCA}, {"촉", 0xCB}, {"촌", 0xCC}, {"촐", 0xCD}, {"촘", 0xCE}, {"촙", 0xCF},
{"촛", 0xD0}, {"총", 0xD1}, {"촤", 0xD2}, {"촨", 0xD3}, {"촬", 0xD4}, {"촹", 0xD5}, {"최", 0xD6}, {"쵠", 0xD7}, {"쵤", 0xD8}, {"쵬", 0xD9}, {"쵭", 0xDA}, {"쵯", 0xDB}, {"쵱", 0xDC}, {"쵸", 0xDD}, {"춈", 0xDE}, {"추", 0xDF},
{"축", 0xE0}, {"춘", 0xE1}, {"출", 0xE2}, {"춤", 0xE3}, {"춥", 0xE4}, {"춧", 0xE5}, {"충", 0xE6}, {"춰", 0xE7}, {"췄", 0xE8}, {"췌", 0xE9}, {"췐", 0xEA}, {"취", 0xEB}, {"췬", 0xEC}, {"췰", 0xED}, {"췸", 0xEE}, {"췹", 0xEF},
{"췻", 0xF0}, {"췽", 0xF1}, {"츄", 0xF2}, {"츈", 0xF3}, {"츌", 0xF4}, {"츔", 0xF5}, {"츙", 0xF6}, {"츠", 0xF7}, {"측", 0xF8}, {"츤", 0xF9}, {"츨", 0xFA}, {"츰", 0xFB}, {"츱", 0xFC}, {"츳", 0xFD}, {"층", 0xFE},
};
private static readonly Dictionary U2GSC_KOR_9 = new Dictionary {
{"치", 0x01}, {"칙", 0x02}, {"친", 0x03}, {"칟", 0x04}, {"칠", 0x05}, {"칡", 0x06}, {"침", 0x07}, {"칩", 0x08}, {"칫", 0x09}, {"칭", 0x0A}, {"카", 0x0B}, {"칵", 0x0C}, {"칸", 0x0D}, {"칼", 0x0E}, {"캄", 0x0F},
{"캅", 0x10}, {"캇", 0x11}, {"캉", 0x12}, {"캐", 0x13}, {"캑", 0x14}, {"캔", 0x15}, {"캘", 0x16}, {"캠", 0x17}, {"캡", 0x18}, {"캣", 0x19}, {"캤", 0x1A}, {"캥", 0x1B}, {"캬", 0x1C}, {"캭", 0x1D}, {"컁", 0x1E}, {"커", 0x1F},
{"컥", 0x20}, {"컨", 0x21}, {"컫", 0x22}, {"컬", 0x23}, {"컴", 0x24}, {"컵", 0x25}, {"컷", 0x26}, {"컸", 0x27}, {"컹", 0x28}, {"케", 0x29}, {"켁", 0x2A}, {"켄", 0x2B}, {"켈", 0x2C}, {"켐", 0x2D}, {"켑", 0x2E}, {"켓", 0x2F},
{"켕", 0x30}, {"켜", 0x31}, {"켠", 0x32}, {"켤", 0x33}, {"켬", 0x34}, {"켭", 0x35}, {"켯", 0x36}, {"켰", 0x37}, {"켱", 0x38}, {"켸", 0x39}, {"코", 0x3A}, {"콕", 0x3B}, {"콘", 0x3C}, {"콜", 0x3D}, {"콤", 0x3E}, {"콥", 0x3F},
{"콧", 0x40}, {"콩", 0x41}, {"콰", 0x42}, {"콱", 0x43}, {"콴", 0x44}, {"콸", 0x45}, {"쾀", 0x46}, {"쾅", 0x47}, {"쾌", 0x48}, {"쾡", 0x49}, {"쾨", 0x4A}, {"쾰", 0x4B}, {"쿄", 0x4C}, {"쿠", 0x4D}, {"쿡", 0x4E}, {"쿤", 0x4F},
{"쿨", 0x60}, {"쿰", 0x61}, {"쿱", 0x62}, {"쿳", 0x63}, {"쿵", 0x64}, {"쿼", 0x65}, {"퀀", 0x66}, {"퀄", 0x67}, {"퀑", 0x68}, {"퀘", 0x69}, {"퀭", 0x6A}, {"퀴", 0x6B}, {"퀵", 0x6C}, {"퀸", 0x6D}, {"퀼", 0x6E},
{"큄", 0x71}, {"큅", 0x72}, {"큇", 0x73}, {"큉", 0x74}, {"큐", 0x75}, {"큔", 0x76}, {"큘", 0x77}, {"큠", 0x78}, {"크", 0x79}, {"큭", 0x7A}, {"큰", 0x7B}, {"클", 0x7C}, {"큼", 0x7D}, {"큽", 0x7E}, {"킁", 0x7F},
{"키", 0x80}, {"킥", 0x81}, {"킨", 0x82}, {"킬", 0x83}, {"킴", 0x84}, {"킵", 0x85}, {"킷", 0x86}, {"킹", 0x87}, {"타", 0x88}, {"탁", 0x89}, {"탄", 0x8A}, {"탈", 0x8B}, {"탉", 0x8C}, {"탐", 0x8D}, {"탑", 0x8E}, {"탓", 0x8F},
{"탔", 0x90}, {"탕", 0x91}, {"태", 0x92}, {"택", 0x93}, {"탠", 0x94}, {"탤", 0x95}, {"탬", 0x96}, {"탭", 0x97}, {"탯", 0x98}, {"탰", 0x99}, {"탱", 0x9A}, {"탸", 0x9B}, {"턍", 0x9C}, {"터", 0x9D}, {"턱", 0x9E}, {"턴", 0x9F},
{"털", 0xA0}, {"턺", 0xA1}, {"텀", 0xA2}, {"텁", 0xA3}, {"텃", 0xA4}, {"텄", 0xA5}, {"텅", 0xA6}, {"테", 0xA7}, {"텍", 0xA8}, {"텐", 0xA9}, {"텔", 0xAA}, {"템", 0xAB}, {"텝", 0xAC}, {"텟", 0xAD}, {"텡", 0xAE}, {"텨", 0xAF},
{"텬", 0xB0}, {"텼", 0xB1}, {"톄", 0xB2}, {"톈", 0xB3}, {"토", 0xB4}, {"톡", 0xB5}, {"톤", 0xB6}, {"톨", 0xB7}, {"톰", 0xB8}, {"톱", 0xB9}, {"톳", 0xBA}, {"통", 0xBB}, {"톺", 0xBC}, {"톼", 0xBD}, {"퇀", 0xBE}, {"퇘", 0xBF},
{"퇴", 0xC0}, {"퇸", 0xC1}, {"툇", 0xC2}, {"툉", 0xC3}, {"툐", 0xC4}, {"투", 0xC5}, {"툭", 0xC6}, {"툰", 0xC7}, {"툴", 0xC8}, {"툼", 0xC9}, {"툽", 0xCA}, {"툿", 0xCB}, {"퉁", 0xCC}, {"퉈", 0xCD}, {"퉜", 0xCE},
{"퉤", 0xD1}, {"튀", 0xD2}, {"튁", 0xD3}, {"튄", 0xD4}, {"튈", 0xD5}, {"튐", 0xD6}, {"튑", 0xD7}, {"튕", 0xD8}, {"튜", 0xD9}, {"튠", 0xDA}, {"튤", 0xDB}, {"튬", 0xDC}, {"튱", 0xDD}, {"트", 0xDE}, {"특", 0xDF},
{"튼", 0xE0}, {"튿", 0xE1}, {"틀", 0xE2}, {"틂", 0xE3}, {"틈", 0xE4}, {"틉", 0xE5}, {"틋", 0xE6}, {"틔", 0xE7}, {"틘", 0xE8}, {"틜", 0xE9}, {"틤", 0xEA}, {"틥", 0xEB}, {"티", 0xEC}, {"틱", 0xED}, {"틴", 0xEE}, {"틸", 0xEF},
{"팀", 0xF0}, {"팁", 0xF1}, {"팃", 0xF2}, {"팅", 0xF3}, {"파", 0xF4}, {"팍", 0xF5}, {"팎", 0xF6}, {"판", 0xF7}, {"팔", 0xF8}, {"팖", 0xF9}, {"팜", 0xFA}, {"팝", 0xFB}, {"팟", 0xFC}, {"팠", 0xFD}, {"팡", 0xFE}, {"팥", 0xFF},
};
private static readonly Dictionary U2GSC_KOR_A = new Dictionary {
{"패", 0x00}, {"팩", 0x01}, {"팬", 0x02}, {"팰", 0x03}, {"팸", 0x04}, {"팹", 0x05}, {"팻", 0x06}, {"팼", 0x07}, {"팽", 0x08}, {"퍄", 0x09}, {"퍅", 0x0A}, {"퍼", 0x0B}, {"퍽", 0x0C}, {"펀", 0x0D}, {"펄", 0x0E}, {"펌", 0x0F},
{"펍", 0x10}, {"펏", 0x11}, {"펐", 0x12}, {"펑", 0x13}, {"페", 0x14}, {"펙", 0x15}, {"펜", 0x16}, {"펠", 0x17}, {"펨", 0x18}, {"펩", 0x19}, {"펫", 0x1A}, {"펭", 0x1B}, {"펴", 0x1C}, {"편", 0x1D}, {"펼", 0x1E}, {"폄", 0x1F},
{"폅", 0x20}, {"폈", 0x21}, {"평", 0x22}, {"폐", 0x23}, {"폘", 0x24}, {"폡", 0x25}, {"폣", 0x26}, {"포", 0x27}, {"폭", 0x28}, {"폰", 0x29}, {"폴", 0x2A}, {"폼", 0x2B}, {"폽", 0x2C}, {"폿", 0x2D}, {"퐁", 0x2E},
{"퐈", 0x31}, {"퐝", 0x32}, {"푀", 0x33}, {"푄", 0x34}, {"표", 0x35}, {"푠", 0x36}, {"푤", 0x37}, {"푭", 0x38}, {"푯", 0x39}, {"푸", 0x3A}, {"푹", 0x3B}, {"푼", 0x3C}, {"푿", 0x3D}, {"풀", 0x3E}, {"풂", 0x3F},
{"품", 0x40}, {"풉", 0x41}, {"풋", 0x42}, {"풍", 0x43}, {"풔", 0x44}, {"풩", 0x45}, {"퓌", 0x46}, {"퓐", 0x47}, {"퓔", 0x48}, {"퓜", 0x49}, {"퓟", 0x4A}, {"퓨", 0x4B}, {"퓬", 0x4C}, {"퓰", 0x4D}, {"퓸", 0x4E}, {"퓻", 0x4F},
{"퓽", 0x60}, {"프", 0x61}, {"픈", 0x62}, {"플", 0x63}, {"픔", 0x64}, {"픕", 0x65}, {"픗", 0x66}, {"피", 0x67}, {"픽", 0x68}, {"핀", 0x69}, {"필", 0x6A}, {"핌", 0x6B}, {"핍", 0x6C}, {"핏", 0x6D}, {"핑", 0x6E}, {"하", 0x6F},
{"학", 0x70}, {"한", 0x71}, {"할", 0x72}, {"핥", 0x73}, {"함", 0x74}, {"합", 0x75}, {"핫", 0x76}, {"항", 0x77}, {"해", 0x78}, {"핵", 0x79}, {"핸", 0x7A}, {"핼", 0x7B}, {"햄", 0x7C}, {"햅", 0x7D}, {"햇", 0x7E}, {"했", 0x7F},
{"행", 0x80}, {"햐", 0x81}, {"향", 0x82}, {"허", 0x83}, {"헉", 0x84}, {"헌", 0x85}, {"헐", 0x86}, {"헒", 0x87}, {"험", 0x88}, {"헙", 0x89}, {"헛", 0x8A}, {"헝", 0x8B}, {"헤", 0x8C}, {"헥", 0x8D}, {"헨", 0x8E}, {"헬", 0x8F},
{"헴", 0x90}, {"헵", 0x91}, {"헷", 0x92}, {"헹", 0x93}, {"혀", 0x94}, {"혁", 0x95}, {"현", 0x96}, {"혈", 0x97}, {"혐", 0x98}, {"협", 0x99}, {"혓", 0x9A}, {"혔", 0x9B}, {"형", 0x9C}, {"혜", 0x9D}, {"혠", 0x9E},
{"혤", 0xA1}, {"혭", 0xA2}, {"호", 0xA3}, {"혹", 0xA4}, {"혼", 0xA5}, {"홀", 0xA6}, {"홅", 0xA7}, {"홈", 0xA8}, {"홉", 0xA9}, {"홋", 0xAA}, {"홍", 0xAB}, {"홑", 0xAC}, {"화", 0xAD}, {"확", 0xAE}, {"환", 0xAF},
{"활", 0xB0}, {"홧", 0xB1}, {"황", 0xB2}, {"홰", 0xB3}, {"홱", 0xB4}, {"홴", 0xB5}, {"횃", 0xB6}, {"횅", 0xB7}, {"회", 0xB8}, {"획", 0xB9}, {"횐", 0xBA}, {"횔", 0xBB}, {"횝", 0xBC}, {"횟", 0xBD}, {"횡", 0xBE}, {"효", 0xBF},
{"횬", 0xC0}, {"횰", 0xC1}, {"횹", 0xC2}, {"횻", 0xC3}, {"후", 0xC4}, {"훅", 0xC5}, {"훈", 0xC6}, {"훌", 0xC7}, {"훑", 0xC8}, {"훔", 0xC9}, {"훗", 0xCA}, {"훙", 0xCB}, {"훠", 0xCC}, {"훤", 0xCD}, {"훨", 0xCE}, {"훰", 0xCF},
{"훵", 0xD0}, {"훼", 0xD1}, {"훽", 0xD2}, {"휀", 0xD3}, {"휄", 0xD4}, {"휑", 0xD5}, {"휘", 0xD6}, {"휙", 0xD7}, {"휜", 0xD8}, {"휠", 0xD9}, {"휨", 0xDA}, {"휩", 0xDB}, {"휫", 0xDC}, {"휭", 0xDD}, {"휴", 0xDE}, {"휵", 0xDF},
{"휸", 0xE0}, {"휼", 0xE1}, {"흄", 0xE2}, {"흇", 0xE3}, {"흉", 0xE4}, {"흐", 0xE5}, {"흑", 0xE6}, {"흔", 0xE7}, {"흖", 0xE8}, {"흗", 0xE9}, {"흘", 0xEA}, {"흙", 0xEB}, {"흠", 0xEC}, {"흡", 0xED}, {"흣", 0xEE}, {"흥", 0xEF},
{"흩", 0xF0}, {"희", 0xF1}, {"흰", 0xF2}, {"흴", 0xF3}, {"흼", 0xF4}, {"흽", 0xF5}, {"힁", 0xF6}, {"히", 0xF7}, {"힉", 0xF8}, {"힌", 0xF9}, {"힐", 0xFA}, {"힘", 0xFB}, {"힙", 0xFC}, {"힛", 0xFD}, {"힝", 0xFE},
};
private static readonly Dictionary U2GSC_KOR_B = new Dictionary {
{"ㄱ", 0x00}, {"ㄴ", 0x01}, {"ㄷ", 0x02}, {"ㄹ", 0x03}, {"ㅁ", 0x04}, {"ㅂ", 0x05}, {"ㅅ", 0x06}, {"ㅇ", 0x07}, {"ㅈ", 0x08}, {"ㅊ", 0x09}, {"ㅋ", 0x0A}, {"ㅌ", 0x0B}, {"ㅍ", 0x0C}, {"ㅎ", 0x0D}, {"ㄲ", 0x0E}, {"ㄸ", 0x0F},
{"ㅃ", 0x10}, {"ㅆ", 0x11}, {"ㅉ", 0x12},
{"ㅏ", 0x20}, {"ㅑ", 0x21}, {"ㅓ", 0x22}, {"ㅕ", 0x23}, {"ㅗ", 0x24}, {"ㅛ", 0x25}, {"ㅜ", 0x26}, {"ㅠ", 0x27}, {"ㅡ", 0x28}, {"ㅣ", 0x29}, {"ㅐ", 0x2A}, {"ㅒ", 0x2B}, {"ㅔ", 0x2C}, {"ㅖ", 0x2D}, {"ㅘ", 0x2E}, {"ㅙ", 0x2F},
{"ㅚ", 0x30}, {"ㅝ", 0x31}, {"ㅞ", 0x32}, {"ㅟ", 0x33}, {"ㅢ", 0x34}, {"_", 0x3E}, {"—", 0x3F},
{"「", 0x60}, {"」", 0x61}, {"『", 0x62}, {"』", 0x63}, {"(", 0x64}, {")", 0x65}, {"!", 0x66}, {"?", 0x67}, {"-", 0x68}, {"~", 0x69}, {"⋯", 0x6A}, {",", 0x6B}, {".", 0x6C},
{"0", 0xF0}, {"1", 0xF1}, {"2", 0xF2}, {"3", 0xF3}, {"4", 0xF4}, {"5", 0xF5}, {"6", 0xF6}, {"7", 0xF7}, {"8", 0xF8}, {"9", 0xF9},
};
private static readonly Dictionary GSC2U_KOR_0 = new Dictionary {
{0x00, "ㄱ"}, {0x01, "ㄴ"}, {0x02, "ㄷ"}, {0x03, "ㄹ"}, {0x04, "ㅁ"}, {0x05, "ㅂ"}, {0x06, "ㅅ"}, {0x07, "ㅇ"}, {0x08, "ㅈ"}, {0x09, "ㅊ"}, {0x0A, "ㅋ"}, {0x0B, "ㅌ"}, {0x0C, "ㅍ"}, {0x0D, "ㅎ"}, {0x0E, "ㄲ"}, {0x0F, "ㄸ"},
{0x10, "ㅃ"}, {0x11, "ㅆ"}, {0x12, "ㅉ"},
{0x20, "ㅏ"}, {0x21, "ㅑ"}, {0x22, "ㅓ"}, {0x23, "ㅕ"}, {0x24, "ㅗ"}, {0x25, "ㅛ"}, {0x26, "ㅜ"}, {0x27, "ㅠ"}, {0x28, "ㅡ"}, {0x29, "ㅣ"}, {0x2A, "ㅐ"}, {0x2B, "ㅒ"}, {0x2C, "ㅔ"}, {0x2D, "ㅖ"}, {0x2E, "ㅘ"}, {0x2F, "ㅙ"},
{0x30, "ㅚ"}, {0x31, "ㅝ"}, {0x32, "ㅞ"}, {0x33, "ㅟ"}, {0x34, "ㅢ"}, {0x3E, "_"}, {0x3F, "—"},
{0x60, "「"}, {0x61, "」"}, {0x62, "『"}, {0x63, "』"}, {0x64, "("}, {0x65, ")"}, {0x66, "!"}, {0x67, "?"}, {0x68, "-"}, {0x69, "~"}, {0x6A, "⋯"}, {0x6B, ","}, {0x6C, "."},
{0xF0, "0"}, {0xF1, "1"}, {0xF2, "2"}, {0xF3, "3"}, {0xF4, "4"}, {0xF5, "5"}, {0xF6, "6"}, {0xF7, "7"}, {0xF8, "8"}, {0xF9, "9"},
};
private static readonly Dictionary GSC2U_KOR_1 = new Dictionary {
{0x01, "가"}, {0x02, "각"}, {0x03, "간"}, {0x04, "갇"}, {0x05, "갈"}, {0x06, "갉"}, {0x07, "갊"}, {0x08, "감"}, {0x09, "갑"}, {0x0A, "값"}, {0x0B, "갓"}, {0x0C, "갔"}, {0x0D, "강"}, {0x0E, "갖"}, {0x0F, "갗"},
{0x10, "같"}, {0x11, "갚"}, {0x12, "갛"}, {0x13, "개"}, {0x14, "객"}, {0x15, "갠"}, {0x16, "갤"}, {0x17, "갬"}, {0x18, "갭"}, {0x19, "갯"}, {0x1A, "갰"}, {0x1B, "갱"}, {0x1C, "갸"}, {0x1D, "갹"}, {0x1E, "갼"}, {0x1F, "걀"},
{0x20, "걋"}, {0x21, "걍"}, {0x22, "걔"}, {0x23, "걘"}, {0x24, "걜"}, {0x25, "거"}, {0x26, "걱"}, {0x27, "건"}, {0x28, "걷"}, {0x29, "걸"}, {0x2A, "걺"}, {0x2B, "검"}, {0x2C, "겁"}, {0x2D, "것"}, {0x2E, "겄"}, {0x2F, "겅"},
{0x30, "겆"}, {0x31, "겉"}, {0x32, "겊"}, {0x33, "겋"}, {0x34, "게"}, {0x35, "겐"}, {0x36, "겔"}, {0x37, "겜"}, {0x38, "겝"}, {0x39, "겟"}, {0x3A, "겠"}, {0x3B, "겡"}, {0x3C, "겨"}, {0x3D, "격"}, {0x3E, "겪"}, {0x3F, "견"},
{0x40, "겯"}, {0x41, "결"}, {0x42, "겹"}, {0x43, "겸"}, {0x44, "겻"}, {0x45, "겼"}, {0x46, "경"}, {0x47, "곁"}, {0x48, "계"}, {0x49, "곈"}, {0x4A, "곌"}, {0x4B, "곕"}, {0x4C, "곗"}, {0x4D, "고"}, {0x4E, "곡"}, {0x4F, "곤"},
{0x60, "곧"}, {0x61, "골"}, {0x62, "곪"}, {0x63, "곬"}, {0x64, "곯"}, {0x65, "곰"}, {0x66, "곱"}, {0x67, "곳"}, {0x68, "공"}, {0x69, "곶"}, {0x6A, "과"}, {0x6B, "곽"}, {0x6C, "관"}, {0x6D, "괄"}, {0x6E, "괆"},
{0x71, "괌"}, {0x72, "괍"}, {0x73, "괏"}, {0x74, "광"}, {0x75, "괘"}, {0x76, "괜"}, {0x77, "괠"}, {0x78, "괩"}, {0x79, "괬"}, {0x7A, "괭"}, {0x7B, "괴"}, {0x7C, "괵"}, {0x7D, "괸"}, {0x7E, "괼"}, {0x7F, "괻"},
{0x80, "굅"}, {0x81, "굇"}, {0x82, "굉"}, {0x83, "교"}, {0x84, "굔"}, {0x85, "굘"}, {0x86, "굡"}, {0x87, "굣"}, {0x88, "구"}, {0x89, "국"}, {0x8A, "군"}, {0x8B, "굳"}, {0x8C, "굴"}, {0x8D, "굵"}, {0x8E, "굶"}, {0x8F, "굻"},
{0x90, "굼"}, {0x91, "굽"}, {0x92, "굿"}, {0x93, "궁"}, {0x94, "궂"}, {0x95, "궈"}, {0x96, "궉"}, {0x97, "권"}, {0x98, "궐"}, {0x99, "궜"}, {0x9A, "궝"}, {0x9B, "궤"}, {0x9C, "궷"}, {0x9D, "귀"}, {0x9E, "귁"}, {0x9F, "귄"},
{0xA0, "귈"}, {0xA1, "귐"}, {0xA2, "귑"}, {0xA3, "귓"}, {0xA4, "규"}, {0xA5, "균"}, {0xA6, "귤"}, {0xA7, "그"}, {0xA8, "극"}, {0xA9, "근"}, {0xAA, "귿"}, {0xAB, "글"}, {0xAC, "긁"}, {0xAD, "금"}, {0xAE, "급"}, {0xAF, "긋"},
{0xB0, "긍"}, {0xB1, "긔"}, {0xB2, "기"}, {0xB3, "긱"}, {0xB4, "긴"}, {0xB5, "긷"}, {0xB6, "길"}, {0xB7, "긺"}, {0xB8, "김"}, {0xB9, "깁"}, {0xBA, "깃"}, {0xBB, "깅"}, {0xBC, "깆"}, {0xBD, "깊"}, {0xBE, "까"}, {0xBF, "깍"},
{0xC0, "깎"}, {0xC1, "깐"}, {0xC2, "깔"}, {0xC3, "깖"}, {0xC4, "깜"}, {0xC5, "깝"}, {0xC6, "깟"}, {0xC7, "깠"}, {0xC8, "깡"}, {0xC9, "깥"}, {0xCA, "깨"}, {0xCB, "깩"}, {0xCC, "깬"}, {0xCD, "깰"}, {0xCE, "깸"},
{0xD1, "깹"}, {0xD2, "깻"}, {0xD3, "깼"}, {0xD4, "깽"}, {0xD5, "꺄"}, {0xD6, "꺅"}, {0xD7, "꺌"}, {0xD8, "꺼"}, {0xD9, "꺽"}, {0xDA, "꺾"}, {0xDB, "껀"}, {0xDC, "껄"}, {0xDD, "껌"}, {0xDE, "껍"}, {0xDF, "껏"},
{0xE0, "껐"}, {0xE1, "껑"}, {0xE2, "께"}, {0xE3, "껙"}, {0xE4, "껜"}, {0xE5, "껨"}, {0xE6, "껫"}, {0xE7, "껭"}, {0xE8, "껴"}, {0xE9, "껸"}, {0xEA, "껼"}, {0xEB, "꼇"}, {0xEC, "꼈"}, {0xED, "꼍"}, {0xEE, "꼐"}, {0xEF, "꼬"},
{0xF0, "꼭"}, {0xF1, "꼰"}, {0xF2, "꼲"}, {0xF3, "꼴"}, {0xF4, "꼼"}, {0xF5, "꼽"}, {0xF6, "꼿"}, {0xF7, "꽁"}, {0xF8, "꽂"}, {0xF9, "꽃"}, {0xFA, "꽈"}, {0xFB, "꽉"}, {0xFC, "꽐"}, {0xFD, "꽜"}, {0xFE, "꽝"}, {0xFF, "꽤"},
};
private static readonly Dictionary GSC2U_KOR_2 = new Dictionary {
{0x00, "꽥"}, {0x01, "꽹"}, {0x02, "꾀"}, {0x03, "꾄"}, {0x04, "꾈"}, {0x05, "꾐"}, {0x06, "꾑"}, {0x07, "꾕"}, {0x08, "꾜"}, {0x09, "꾸"}, {0x0A, "꾹"}, {0x0B, "꾼"}, {0x0C, "꿀"}, {0x0D, "꿇"}, {0x0E, "꿈"}, {0x0F, "꿉"},
{0x10, "꿋"}, {0x11, "꿍"}, {0x12, "꿎"}, {0x13, "꿔"}, {0x14, "꿜"}, {0x15, "꿨"}, {0x16, "꿩"}, {0x17, "꿰"}, {0x18, "꿱"}, {0x19, "꿴"}, {0x1A, "꿸"}, {0x1B, "뀀"}, {0x1C, "뀁"}, {0x1D, "뀄"}, {0x1E, "뀌"}, {0x1F, "뀐"},
{0x20, "뀔"}, {0x21, "뀜"}, {0x22, "뀝"}, {0x23, "뀨"}, {0x24, "끄"}, {0x25, "끅"}, {0x26, "끈"}, {0x27, "끊"}, {0x28, "끌"}, {0x29, "끎"}, {0x2A, "끓"}, {0x2B, "끔"}, {0x2C, "끕"}, {0x2D, "끗"}, {0x2E, "끙"},
{0x31, "끝"}, {0x32, "끼"}, {0x33, "끽"}, {0x34, "낀"}, {0x35, "낄"}, {0x36, "낌"}, {0x37, "낍"}, {0x38, "낏"}, {0x39, "낑"}, {0x3A, "나"}, {0x3B, "낙"}, {0x3C, "낚"}, {0x3D, "난"}, {0x3E, "낟"}, {0x3F, "날"},
{0x40, "낡"}, {0x41, "낢"}, {0x42, "남"}, {0x43, "납"}, {0x44, "낫"}, {0x45, "났"}, {0x46, "낭"}, {0x47, "낮"}, {0x48, "낯"}, {0x49, "낱"}, {0x4A, "낳"}, {0x4B, "내"}, {0x4C, "낵"}, {0x4D, "낸"}, {0x4E, "낼"}, {0x4F, "냄"},
{0x60, "냅"}, {0x61, "냇"}, {0x62, "냈"}, {0x63, "냉"}, {0x64, "냐"}, {0x65, "냑"}, {0x66, "냔"}, {0x67, "냘"}, {0x68, "냠"}, {0x69, "냥"}, {0x6A, "너"}, {0x6B, "넉"}, {0x6C, "넋"}, {0x6D, "넌"}, {0x6E, "널"}, {0x6F, "넒"},
{0x70, "넓"}, {0x71, "넘"}, {0x72, "넙"}, {0x73, "넛"}, {0x74, "넜"}, {0x75, "넝"}, {0x76, "넣"}, {0x77, "네"}, {0x78, "넥"}, {0x79, "넨"}, {0x7A, "넬"}, {0x7B, "넴"}, {0x7C, "넵"}, {0x7D, "넷"}, {0x7E, "넸"}, {0x7F, "넹"},
{0x80, "녀"}, {0x81, "녁"}, {0x82, "년"}, {0x83, "녈"}, {0x84, "념"}, {0x85, "녑"}, {0x86, "녔"}, {0x87, "녕"}, {0x88, "녘"}, {0x89, "녜"}, {0x8A, "녠"}, {0x8B, "노"}, {0x8C, "녹"}, {0x8D, "논"}, {0x8E, "놀"}, {0x8F, "놂"},
{0x90, "놈"}, {0x91, "놉"}, {0x92, "놋"}, {0x93, "농"}, {0x94, "높"}, {0x95, "놓"}, {0x96, "놔"}, {0x97, "놘"}, {0x98, "놜"}, {0x99, "놨"}, {0x9A, "뇌"}, {0x9B, "뇐"}, {0x9C, "뇔"}, {0x9D, "뇜"}, {0x9E, "뇝"},
{0xA1, "뇟"}, {0xA2, "뇨"}, {0xA3, "뇩"}, {0xA4, "뇬"}, {0xA5, "뇰"}, {0xA6, "뇹"}, {0xA7, "뇻"}, {0xA8, "뇽"}, {0xA9, "누"}, {0xAA, "눅"}, {0xAB, "눈"}, {0xAC, "눋"}, {0xAD, "눌"}, {0xAE, "눔"}, {0xAF, "눕"},
{0xB0, "눗"}, {0xB1, "눙"}, {0xB2, "눠"}, {0xB3, "눴"}, {0xB4, "눼"}, {0xB5, "뉘"}, {0xB6, "뉜"}, {0xB7, "뉠"}, {0xB8, "뉨"}, {0xB9, "뉩"}, {0xBA, "뉴"}, {0xBB, "뉵"}, {0xBC, "뉼"}, {0xBD, "늄"}, {0xBE, "늅"}, {0xBF, "늉"},
{0xC0, "느"}, {0xC1, "늑"}, {0xC2, "는"}, {0xC3, "늘"}, {0xC4, "늙"}, {0xC5, "늚"}, {0xC6, "늠"}, {0xC7, "늡"}, {0xC8, "늣"}, {0xC9, "능"}, {0xCA, "늦"}, {0xCB, "늪"}, {0xCC, "늬"}, {0xCD, "늰"}, {0xCE, "늴"}, {0xCF, "니"},
{0xD0, "닉"}, {0xD1, "닌"}, {0xD2, "닐"}, {0xD3, "닒"}, {0xD4, "님"}, {0xD5, "닙"}, {0xD6, "닛"}, {0xD7, "닝"}, {0xD8, "닢"}, {0xD9, "다"}, {0xDA, "닥"}, {0xDB, "닦"}, {0xDC, "단"}, {0xDD, "닫"}, {0xDE, "달"}, {0xDF, "닭"},
{0xE0, "닮"}, {0xE1, "닯"}, {0xE2, "닳"}, {0xE3, "담"}, {0xE4, "답"}, {0xE5, "닷"}, {0xE6, "닸"}, {0xE7, "당"}, {0xE8, "닺"}, {0xE9, "닻"}, {0xEA, "닿"}, {0xEB, "대"}, {0xEC, "댁"}, {0xED, "댄"}, {0xEE, "댈"}, {0xEF, "댐"},
{0xF0, "댑"}, {0xF1, "댓"}, {0xF2, "댔"}, {0xF3, "댕"}, {0xF5, "더"}, {0xF6, "덕"}, {0xF7, "덖"}, {0xF8, "던"}, {0xF9, "덛"}, {0xFA, "덜"}, {0xFB, "덞"}, {0xFC, "덟"}, {0xFD, "덤"}, {0xFE, "덥"},
};
private static readonly Dictionary GSC2U_KOR_3 = new Dictionary {
{0x01, "덧"}, {0x02, "덩"}, {0x03, "덫"}, {0x04, "덮"}, {0x05, "데"}, {0x06, "덱"}, {0x07, "덴"}, {0x08, "델"}, {0x09, "뎀"}, {0x0A, "뎁"}, {0x0B, "뎃"}, {0x0C, "뎄"}, {0x0D, "뎅"}, {0x0E, "뎌"}, {0x0F, "뎐"},
{0x10, "뎔"}, {0x11, "뎠"}, {0x12, "뎡"}, {0x13, "뎨"}, {0x14, "뎬"}, {0x15, "도"}, {0x16, "독"}, {0x17, "돈"}, {0x18, "돋"}, {0x19, "돌"}, {0x1A, "돎"}, {0x1C, "돔"}, {0x1D, "돕"}, {0x1E, "돗"}, {0x1F, "동"},
{0x20, "돛"}, {0x21, "돝"}, {0x22, "돠"}, {0x23, "돤"}, {0x24, "돨"}, {0x25, "돼"}, {0x26, "됐"}, {0x27, "되"}, {0x28, "된"}, {0x29, "될"}, {0x2A, "됨"}, {0x2B, "됩"}, {0x2C, "됫"}, {0x2D, "됴"}, {0x2E, "두"}, {0x2F, "둑"},
{0x30, "둔"}, {0x31, "둘"}, {0x32, "둠"}, {0x33, "둡"}, {0x34, "둣"}, {0x35, "둥"}, {0x36, "둬"}, {0x37, "뒀"}, {0x38, "뒈"}, {0x39, "뒝"}, {0x3A, "뒤"}, {0x3B, "뒨"}, {0x3C, "뒬"}, {0x3D, "뒵"}, {0x3E, "뒷"}, {0x3F, "뒹"},
{0x40, "듀"}, {0x41, "듄"}, {0x42, "듈"}, {0x43, "듐"}, {0x44, "듕"}, {0x45, "드"}, {0x46, "득"}, {0x47, "든"}, {0x48, "듣"}, {0x49, "들"}, {0x4A, "듦"}, {0x4B, "듬"}, {0x4C, "듭"}, {0x4D, "듯"}, {0x4E, "등"}, {0x4F, "듸"},
{0x60, "디"}, {0x61, "딕"}, {0x62, "딘"}, {0x63, "딛"}, {0x64, "딜"}, {0x65, "딤"}, {0x66, "딥"}, {0x67, "딧"}, {0x68, "딨"}, {0x69, "딩"}, {0x6A, "딪"}, {0x6B, "따"}, {0x6C, "딱"}, {0x6D, "딴"}, {0x6E, "딸"},
{0x71, "땀"}, {0x72, "땁"}, {0x73, "땃"}, {0x74, "땄"}, {0x75, "땅"}, {0x76, "땋"}, {0x77, "때"}, {0x78, "땍"}, {0x79, "땐"}, {0x7A, "땔"}, {0x7B, "땜"}, {0x7C, "땝"}, {0x7D, "땟"}, {0x7E, "땠"}, {0x7F, "땡"},
{0x80, "떠"}, {0x81, "떡"}, {0x82, "떤"}, {0x83, "떨"}, {0x84, "떪"}, {0x85, "떫"}, {0x86, "떰"}, {0x87, "떱"}, {0x88, "떳"}, {0x89, "떴"}, {0x8A, "떵"}, {0x8B, "떻"}, {0x8C, "떼"}, {0x8D, "떽"}, {0x8E, "뗀"}, {0x8F, "뗄"},
{0x90, "뗌"}, {0x91, "뗍"}, {0x92, "뗏"}, {0x93, "뗐"}, {0x94, "뗑"}, {0x95, "뗘"}, {0x96, "뗬"}, {0x97, "또"}, {0x98, "똑"}, {0x99, "똔"}, {0x9A, "똘"}, {0x9B, "똥"}, {0x9C, "똬"}, {0x9D, "똴"}, {0x9E, "뙈"}, {0x9F, "뙤"},
{0xA0, "뙨"}, {0xA1, "뚜"}, {0xA2, "뚝"}, {0xA3, "뚠"}, {0xA4, "뚤"}, {0xA5, "뚫"}, {0xA6, "뚬"}, {0xA7, "뚱"}, {0xA8, "뛔"}, {0xA9, "뛰"}, {0xAA, "뛴"}, {0xAB, "뛸"}, {0xAC, "뜀"}, {0xAD, "뜁"}, {0xAE, "뜅"}, {0xAF, "뜨"},
{0xB0, "뜩"}, {0xB1, "뜬"}, {0xB2, "뜯"}, {0xB3, "뜰"}, {0xB4, "뜸"}, {0xB5, "뜹"}, {0xB6, "뜻"}, {0xB7, "띄"}, {0xB8, "띈"}, {0xB9, "띌"}, {0xBA, "띔"}, {0xBB, "띕"}, {0xBC, "띠"}, {0xBD, "띤"}, {0xBE, "띨"}, {0xBF, "띰"},
{0xC0, "띱"}, {0xC1, "띳"}, {0xC2, "띵"}, {0xC3, "라"}, {0xC4, "락"}, {0xC5, "란"}, {0xC6, "랄"}, {0xC7, "람"}, {0xC8, "랍"}, {0xC9, "랏"}, {0xCA, "랐"}, {0xCB, "랑"}, {0xCC, "랒"}, {0xCD, "랖"}, {0xCE, "랗"},
{0xD0, "뢔"}, {0xD1, "래"}, {0xD2, "랙"}, {0xD3, "랜"}, {0xD4, "랠"}, {0xD5, "램"}, {0xD6, "랩"}, {0xD7, "랫"}, {0xD8, "랬"}, {0xD9, "랭"}, {0xDA, "랴"}, {0xDB, "략"}, {0xDC, "랸"}, {0xDD, "럇"}, {0xDE, "량"}, {0xDF, "러"},
{0xE0, "럭"}, {0xE1, "런"}, {0xE2, "럴"}, {0xE3, "럼"}, {0xE4, "럽"}, {0xE5, "럿"}, {0xE6, "렀"}, {0xE7, "렁"}, {0xE8, "렇"}, {0xE9, "레"}, {0xEA, "렉"}, {0xEB, "렌"}, {0xEC, "렐"}, {0xED, "렘"}, {0xEE, "렙"}, {0xEF, "렛"},
{0xF0, "렝"}, {0xF1, "려"}, {0xF2, "력"}, {0xF3, "련"}, {0xF4, "렬"}, {0xF5, "렴"}, {0xF6, "렵"}, {0xF7, "렷"}, {0xF8, "렸"}, {0xF9, "령"}, {0xFA, "례"}, {0xFB, "롄"}, {0xFC, "롑"}, {0xFD, "롓"}, {0xFE, "로"}, {0xFF, "록"},
};
private static readonly Dictionary GSC2U_KOR_4 = new Dictionary {
{0x00, "론"}, {0x01, "롤"}, {0x02, "롬"}, {0x03, "롭"}, {0x04, "롯"}, {0x05, "롱"}, {0x06, "롸"}, {0x07, "롼"}, {0x08, "뢍"}, {0x09, "뢨"}, {0x0A, "뢰"}, {0x0B, "뢴"}, {0x0C, "뢸"}, {0x0D, "룀"}, {0x0E, "룁"}, {0x0F, "룃"},
{0x10, "룅"}, {0x11, "료"}, {0x12, "룐"}, {0x13, "룔"}, {0x14, "룝"}, {0x15, "룟"}, {0x16, "룡"}, {0x17, "루"}, {0x18, "룩"}, {0x19, "룬"}, {0x1A, "룰"}, {0x1B, "룸"}, {0x1C, "룹"}, {0x1D, "룻"}, {0x1E, "룽"}, {0x1F, "뤄"},
{0x20, "뤘"}, {0x21, "뤠"}, {0x22, "뤼"}, {0x23, "뤽"}, {0x24, "륀"}, {0x25, "륄"}, {0x26, "륌"}, {0x27, "륏"}, {0x28, "륑"}, {0x29, "류"}, {0x2A, "륙"}, {0x2B, "륜"}, {0x2C, "률"}, {0x2D, "륨"}, {0x2E, "륩"},
{0x31, "륫"}, {0x32, "륭"}, {0x33, "르"}, {0x34, "륵"}, {0x35, "른"}, {0x36, "를"}, {0x37, "름"}, {0x38, "릅"}, {0x39, "릇"}, {0x3A, "릉"}, {0x3B, "릊"}, {0x3C, "릍"}, {0x3D, "릎"}, {0x3E, "리"}, {0x3F, "릭"},
{0x40, "린"}, {0x41, "릴"}, {0x42, "림"}, {0x43, "립"}, {0x44, "릿"}, {0x45, "링"}, {0x46, "마"}, {0x47, "막"}, {0x48, "만"}, {0x49, "많"}, {0x4A, "맏"}, {0x4B, "말"}, {0x4C, "맑"}, {0x4D, "맒"}, {0x4E, "맘"}, {0x4F, "맙"},
{0x60, "맛"}, {0x61, "망"}, {0x62, "맞"}, {0x63, "맡"}, {0x64, "맣"}, {0x65, "매"}, {0x66, "맥"}, {0x67, "맨"}, {0x68, "맬"}, {0x69, "맴"}, {0x6A, "맵"}, {0x6B, "맷"}, {0x6C, "맸"}, {0x6D, "맹"}, {0x6E, "맺"}, {0x6F, "먀"},
{0x70, "먁"}, {0x71, "먈"}, {0x72, "먕"}, {0x73, "머"}, {0x74, "먹"}, {0x75, "먼"}, {0x76, "멀"}, {0x77, "멂"}, {0x78, "멈"}, {0x79, "멉"}, {0x7A, "멋"}, {0x7B, "멍"}, {0x7C, "멎"}, {0x7D, "멓"}, {0x7E, "메"}, {0x7F, "멕"},
{0x80, "멘"}, {0x81, "멜"}, {0x82, "멤"}, {0x83, "멥"}, {0x84, "멧"}, {0x85, "멨"}, {0x86, "멩"}, {0x87, "며"}, {0x88, "멱"}, {0x89, "면"}, {0x8A, "멸"}, {0x8B, "몃"}, {0x8C, "몄"}, {0x8D, "명"}, {0x8E, "몇"}, {0x8F, "몌"},
{0x90, "모"}, {0x91, "목"}, {0x92, "몫"}, {0x93, "몬"}, {0x94, "몰"}, {0x95, "몲"}, {0x96, "몸"}, {0x97, "몹"}, {0x98, "못"}, {0x99, "몽"}, {0x9A, "뫄"}, {0x9B, "뫈"}, {0x9C, "뫘"}, {0x9D, "뫙"}, {0x9E, "뫼"},
{0xA1, "묀"}, {0xA2, "묄"}, {0xA3, "묍"}, {0xA4, "묏"}, {0xA5, "묑"}, {0xA6, "묘"}, {0xA7, "묜"}, {0xA8, "묠"}, {0xA9, "묩"}, {0xAA, "묫"}, {0xAB, "무"}, {0xAC, "묵"}, {0xAD, "묶"}, {0xAE, "문"}, {0xAF, "묻"},
{0xB0, "물"}, {0xB1, "묽"}, {0xB2, "묾"}, {0xB3, "뭄"}, {0xB4, "뭅"}, {0xB5, "뭇"}, {0xB6, "뭉"}, {0xB7, "뭍"}, {0xB8, "뭏"}, {0xB9, "뭐"}, {0xBA, "뭔"}, {0xBB, "뭘"}, {0xBC, "뭡"}, {0xBD, "뭣"}, {0xBE, "뭬"}, {0xBF, "뮈"},
{0xC0, "뮌"}, {0xC1, "뮐"}, {0xC2, "뮤"}, {0xC3, "뮨"}, {0xC4, "뮬"}, {0xC5, "뮴"}, {0xC6, "뮷"}, {0xC7, "므"}, {0xC8, "믄"}, {0xC9, "믈"}, {0xCA, "믐"}, {0xCB, "믓"}, {0xCC, "미"}, {0xCD, "믹"}, {0xCE, "민"}, {0xCF, "믿"},
{0xD0, "밀"}, {0xD1, "밂"}, {0xD2, "밈"}, {0xD3, "밉"}, {0xD4, "밋"}, {0xD5, "밌"}, {0xD6, "밍"}, {0xD7, "및"}, {0xD8, "밑"}, {0xD9, "바"}, {0xDA, "박"}, {0xDB, "밖"}, {0xDC, "밗"}, {0xDD, "반"}, {0xDE, "받"}, {0xDF, "발"},
{0xE0, "밝"}, {0xE1, "밞"}, {0xE2, "밟"}, {0xE3, "밤"}, {0xE4, "밥"}, {0xE5, "밧"}, {0xE6, "방"}, {0xE7, "밭"}, {0xE8, "배"}, {0xE9, "백"}, {0xEA, "밴"}, {0xEB, "밸"}, {0xEC, "뱀"}, {0xED, "뱁"}, {0xEE, "뱃"}, {0xEF, "뱄"},
{0xF0, "뱅"}, {0xF1, "뱉"}, {0xF2, "뱌"}, {0xF3, "뱍"}, {0xF4, "뱐"}, {0xF5, "뱝"}, {0xF6, "버"}, {0xF7, "벅"}, {0xF8, "번"}, {0xF9, "벋"}, {0xFA, "벌"}, {0xFB, "벎"}, {0xFC, "범"}, {0xFD, "법"}, {0xFE, "벗"},
};
private static readonly Dictionary GSC2U_KOR_5 = new Dictionary {
{0x01, "벙"}, {0x02, "벚"}, {0x03, "베"}, {0x04, "벡"}, {0x05, "벤"}, {0x06, "벧"}, {0x07, "벨"}, {0x08, "벰"}, {0x09, "벱"}, {0x0A, "벳"}, {0x0B, "벵"}, {0x0C, "벴"}, {0x0D, "벼"}, {0x0E, "벽"}, {0x0F, "변"},
{0x10, "별"}, {0x11, "볍"}, {0x12, "볏"}, {0x13, "볐"}, {0x14, "병"}, {0x15, "볕"}, {0x16, "볘"}, {0x17, "볜"}, {0x18, "보"}, {0x19, "복"}, {0x1A, "볶"}, {0x1B, "본"}, {0x1C, "볼"}, {0x1D, "봄"}, {0x1E, "봅"}, {0x1F, "봇"},
{0x20, "봉"}, {0x21, "봐"}, {0x22, "봔"}, {0x23, "봤"}, {0x24, "봬"}, {0x25, "뵀"}, {0x26, "뵈"}, {0x27, "뵉"}, {0x28, "뵌"}, {0x29, "뵐"}, {0x2A, "뵘"}, {0x2B, "뵙"}, {0x2C, "뵤"}, {0x2D, "뵨"}, {0x2E, "부"}, {0x2F, "북"},
{0x30, "분"}, {0x31, "붇"}, {0x32, "불"}, {0x33, "붉"}, {0x34, "붊"}, {0x35, "붐"}, {0x36, "붑"}, {0x37, "붓"}, {0x38, "붕"}, {0x39, "붙"}, {0x3A, "붚"}, {0x3B, "붜"}, {0x3C, "붤"}, {0x3D, "붰"}, {0x3E, "붸"}, {0x3F, "뷔"},
{0x40, "뷕"}, {0x41, "뷘"}, {0x42, "뷜"}, {0x43, "뷩"}, {0x44, "뷰"}, {0x45, "뷴"}, {0x46, "뷸"}, {0x47, "븀"}, {0x48, "븃"}, {0x49, "븅"}, {0x4A, "브"}, {0x4B, "븍"}, {0x4C, "븐"}, {0x4D, "블"}, {0x4E, "븜"}, {0x4F, "븝"},
{0x60, "븟"}, {0x61, "비"}, {0x62, "빅"}, {0x63, "빈"}, {0x64, "빌"}, {0x65, "빎"}, {0x66, "빔"}, {0x67, "빕"}, {0x68, "빗"}, {0x69, "빙"}, {0x6A, "빚"}, {0x6B, "빛"}, {0x6C, "빠"}, {0x6D, "빡"}, {0x6E, "빤"},
{0x71, "빨"}, {0x72, "빪"}, {0x73, "빰"}, {0x74, "빱"}, {0x75, "빳"}, {0x76, "빴"}, {0x77, "빵"}, {0x78, "빻"}, {0x79, "빼"}, {0x7A, "빽"}, {0x7B, "뺀"}, {0x7C, "뺄"}, {0x7D, "뺌"}, {0x7E, "뺍"}, {0x7F, "뺏"},
{0x80, "뺐"}, {0x81, "뺑"}, {0x82, "뺘"}, {0x83, "뺙"}, {0x84, "뺨"}, {0x85, "뻐"}, {0x86, "뻑"}, {0x87, "뻔"}, {0x88, "뻗"}, {0x89, "뻘"}, {0x8A, "뻠"}, {0x8B, "뻣"}, {0x8C, "뻤"}, {0x8D, "뻥"}, {0x8E, "뻬"}, {0x8F, "뼁"},
{0x90, "뼈"}, {0x91, "뼉"}, {0x92, "뼘"}, {0x93, "뼙"}, {0x94, "뼛"}, {0x95, "뼜"}, {0x96, "뼝"}, {0x97, "뽀"}, {0x98, "뽁"}, {0x99, "뽄"}, {0x9A, "뽈"}, {0x9B, "뽐"}, {0x9C, "뽑"}, {0x9D, "뽕"}, {0x9E, "뾔"}, {0x9F, "뾰"},
{0xA0, "뿅"}, {0xA1, "뿌"}, {0xA2, "뿍"}, {0xA3, "뿐"}, {0xA4, "뿔"}, {0xA5, "뿜"}, {0xA6, "뿟"}, {0xA7, "뿡"}, {0xA8, "쀼"}, {0xA9, "쁑"}, {0xAA, "쁘"}, {0xAB, "쁜"}, {0xAC, "쁠"}, {0xAD, "쁨"}, {0xAE, "쁩"}, {0xAF, "삐"},
{0xB0, "삑"}, {0xB1, "삔"}, {0xB2, "삘"}, {0xB3, "삠"}, {0xB4, "삡"}, {0xB5, "삣"}, {0xB6, "삥"}, {0xB7, "사"}, {0xB8, "삭"}, {0xB9, "삯"}, {0xBA, "산"}, {0xBB, "삳"}, {0xBC, "살"}, {0xBD, "삵"}, {0xBE, "삶"}, {0xBF, "삼"},
{0xC0, "삽"}, {0xC1, "삿"}, {0xC2, "샀"}, {0xC3, "상"}, {0xC4, "샅"}, {0xC5, "새"}, {0xC6, "색"}, {0xC7, "샌"}, {0xC8, "샐"}, {0xC9, "샘"}, {0xCA, "샙"}, {0xCB, "샛"}, {0xCC, "샜"}, {0xCD, "생"}, {0xCE, "샤"},
{0xD1, "샥"}, {0xD2, "샨"}, {0xD3, "샬"}, {0xD4, "샴"}, {0xD5, "샵"}, {0xD6, "샷"}, {0xD7, "샹"}, {0xD8, "섀"}, {0xD9, "섄"}, {0xDA, "섈"}, {0xDB, "섐"}, {0xDC, "섕"}, {0xDD, "서"}, {0xDE, "석"}, {0xDF, "섞"},
{0xE0, "섟"}, {0xE1, "선"}, {0xE2, "섣"}, {0xE3, "설"}, {0xE4, "섦"}, {0xE5, "섧"}, {0xE6, "섬"}, {0xE7, "섭"}, {0xE8, "섯"}, {0xE9, "섰"}, {0xEA, "성"}, {0xEB, "섶"}, {0xEC, "세"}, {0xED, "섹"}, {0xEE, "센"}, {0xEF, "셀"},
{0xF0, "셈"}, {0xF1, "셉"}, {0xF2, "셋"}, {0xF3, "셌"}, {0xF4, "셍"}, {0xF5, "셔"}, {0xF6, "셕"}, {0xF7, "션"}, {0xF8, "셜"}, {0xF9, "셤"}, {0xFA, "셥"}, {0xFB, "셧"}, {0xFC, "셨"}, {0xFD, "셩"}, {0xFE, "셰"}, {0xFF, "셴"},
};
private static readonly Dictionary GSC2U_KOR_6 = new Dictionary {
{0x00, "셸"}, {0x01, "솅"}, {0x02, "소"}, {0x03, "속"}, {0x04, "솎"}, {0x05, "손"}, {0x06, "솔"}, {0x07, "솖"}, {0x08, "솜"}, {0x09, "솝"}, {0x0A, "솟"}, {0x0B, "송"}, {0x0C, "솥"}, {0x0D, "솨"}, {0x0E, "솩"}, {0x0F, "솬"},
{0x10, "솰"}, {0x11, "솽"}, {0x12, "쇄"}, {0x13, "쇈"}, {0x14, "쇌"}, {0x15, "쇔"}, {0x16, "쇗"}, {0x17, "쇘"}, {0x18, "쇠"}, {0x19, "쇤"}, {0x1A, "쇨"}, {0x1B, "쇰"}, {0x1C, "쇱"}, {0x1D, "쇳"}, {0x1E, "쇼"}, {0x1F, "쇽"},
{0x20, "숀"}, {0x21, "숄"}, {0x22, "숌"}, {0x23, "숍"}, {0x24, "숏"}, {0x25, "숑"}, {0x26, "수"}, {0x27, "숙"}, {0x28, "순"}, {0x29, "숟"}, {0x2A, "술"}, {0x2B, "숨"}, {0x2C, "숩"}, {0x2D, "숫"}, {0x2E, "숭"}, {0x2F, "쌰"},
{0x30, "쎼"}, {0x31, "숯"}, {0x32, "숱"}, {0x33, "숲"}, {0x34, "숴"}, {0x35, "쉈"}, {0x36, "쉐"}, {0x37, "쉑"}, {0x38, "쉔"}, {0x39, "쉘"}, {0x3A, "쉠"}, {0x3B, "쉥"}, {0x3C, "쉬"}, {0x3D, "쉭"}, {0x3E, "쉰"}, {0x3F, "쉴"},
{0x40, "쉼"}, {0x41, "쉽"}, {0x42, "쉿"}, {0x43, "슁"}, {0x44, "슈"}, {0x45, "슉"}, {0x46, "슐"}, {0x47, "슘"}, {0x48, "슛"}, {0x49, "슝"}, {0x4A, "스"}, {0x4B, "슥"}, {0x4C, "슨"}, {0x4D, "슬"}, {0x4E, "슭"}, {0x4F, "슴"},
{0x60, "습"}, {0x61, "슷"}, {0x62, "승"}, {0x63, "시"}, {0x64, "식"}, {0x65, "신"}, {0x66, "싣"}, {0x67, "실"}, {0x68, "싫"}, {0x69, "심"}, {0x6A, "십"}, {0x6B, "싯"}, {0x6C, "싱"}, {0x6D, "싶"}, {0x6E, "싸"}, {0x6F, "싹"},
{0x70, "싻"}, {0x71, "싼"}, {0x72, "쌀"}, {0x73, "쌈"}, {0x74, "쌉"}, {0x75, "쌌"}, {0x76, "쌍"}, {0x77, "쌓"}, {0x78, "쌔"}, {0x79, "쌕"}, {0x7A, "쌘"}, {0x7B, "쌜"}, {0x7C, "쌤"}, {0x7D, "쌥"}, {0x7E, "쌨"}, {0x7F, "쌩"},
{0x80, "썅"}, {0x81, "써"}, {0x82, "썩"}, {0x83, "썬"}, {0x84, "썰"}, {0x85, "썲"}, {0x86, "썸"}, {0x87, "썹"}, {0x88, "썼"}, {0x89, "썽"}, {0x8A, "쎄"}, {0x8B, "쎈"}, {0x8C, "쎌"}, {0x8D, "쏀"}, {0x8E, "쏘"}, {0x8F, "쏙"},
{0x90, "쏜"}, {0x91, "쏟"}, {0x92, "쏠"}, {0x93, "쏢"}, {0x94, "쏨"}, {0x95, "쏩"}, {0x96, "쏭"}, {0x97, "쏴"}, {0x98, "쏵"}, {0x99, "쏸"}, {0x9A, "쐈"}, {0x9B, "쐐"}, {0x9C, "쐤"}, {0x9D, "쐬"}, {0x9E, "쐰"},
{0xA0, "쓔"}, {0xA1, "쐴"}, {0xA2, "쐼"}, {0xA3, "쐽"}, {0xA4, "쑈"}, {0xA5, "쑤"}, {0xA6, "쑥"}, {0xA7, "쑨"}, {0xA8, "쑬"}, {0xA9, "쑴"}, {0xAA, "쑵"}, {0xAB, "쑹"}, {0xAC, "쒀"}, {0xAD, "쒔"}, {0xAE, "쒜"}, {0xAF, "쒸"},
{0xB0, "쒼"}, {0xB1, "쓩"}, {0xB2, "쓰"}, {0xB3, "쓱"}, {0xB4, "쓴"}, {0xB5, "쓸"}, {0xB6, "쓺"}, {0xB7, "쓿"}, {0xB8, "씀"}, {0xB9, "씁"}, {0xBA, "씌"}, {0xBB, "씐"}, {0xBC, "씔"}, {0xBD, "씜"}, {0xBE, "씨"}, {0xBF, "씩"},
{0xC0, "씬"}, {0xC1, "씰"}, {0xC2, "씸"}, {0xC3, "씹"}, {0xC4, "씻"}, {0xC5, "씽"}, {0xC6, "아"}, {0xC7, "악"}, {0xC8, "안"}, {0xC9, "앉"}, {0xCA, "않"}, {0xCB, "알"}, {0xCC, "앍"}, {0xCD, "앎"}, {0xCE, "앓"}, {0xCF, "암"},
{0xD0, "압"}, {0xD1, "앗"}, {0xD2, "았"}, {0xD3, "앙"}, {0xD4, "앝"}, {0xD5, "앞"}, {0xD6, "애"}, {0xD7, "액"}, {0xD8, "앤"}, {0xD9, "앨"}, {0xDA, "앰"}, {0xDB, "앱"}, {0xDC, "앳"}, {0xDD, "앴"}, {0xDE, "앵"}, {0xDF, "야"},
{0xE0, "약"}, {0xE1, "얀"}, {0xE2, "얄"}, {0xE3, "얇"}, {0xE4, "얌"}, {0xE5, "얍"}, {0xE6, "얏"}, {0xE7, "양"}, {0xE8, "얕"}, {0xE9, "얗"}, {0xEA, "얘"}, {0xEB, "얜"}, {0xEC, "얠"}, {0xED, "얩"}, {0xEE, "어"}, {0xEF, "억"},
{0xF0, "언"}, {0xF1, "얹"}, {0xF2, "얻"}, {0xF3, "얼"}, {0xF4, "얽"}, {0xF5, "얾"}, {0xF6, "엄"}, {0xF7, "업"}, {0xF8, "없"}, {0xF9, "엇"}, {0xFA, "었"}, {0xFB, "엉"}, {0xFC, "엊"}, {0xFD, "엌"}, {0xFE, "엎"},
};
private static readonly Dictionary GSC2U_KOR_7 = new Dictionary {
{0x01, "에"}, {0x02, "엑"}, {0x03, "엔"}, {0x04, "엘"}, {0x05, "엠"}, {0x06, "엡"}, {0x07, "엣"}, {0x08, "엥"}, {0x09, "여"}, {0x0A, "역"}, {0x0B, "엮"}, {0x0C, "연"}, {0x0D, "열"}, {0x0E, "엶"}, {0x0F, "엷"},
{0x10, "염"}, {0x11, "엽"}, {0x12, "엾"}, {0x13, "엿"}, {0x14, "였"}, {0x15, "영"}, {0x16, "옅"}, {0x17, "옆"}, {0x18, "옇"}, {0x19, "예"}, {0x1A, "옌"}, {0x1B, "옐"}, {0x1C, "옘"}, {0x1D, "옙"}, {0x1E, "옛"}, {0x1F, "옜"},
{0x20, "오"}, {0x21, "옥"}, {0x22, "온"}, {0x23, "올"}, {0x24, "옭"}, {0x25, "옮"}, {0x26, "옰"}, {0x27, "옳"}, {0x28, "옴"}, {0x29, "옵"}, {0x2A, "옷"}, {0x2B, "옹"}, {0x2C, "옻"}, {0x2D, "와"}, {0x2E, "왁"}, {0x2F, "완"},
{0x30, "왈"}, {0x31, "왐"}, {0x32, "왑"}, {0x33, "왓"}, {0x34, "왔"}, {0x35, "왕"}, {0x36, "왜"}, {0x37, "왝"}, {0x38, "왠"}, {0x39, "왬"}, {0x3A, "왯"}, {0x3B, "왱"}, {0x3C, "외"}, {0x3D, "왹"}, {0x3E, "왼"}, {0x3F, "욀"},
{0x40, "욈"}, {0x41, "욉"}, {0x42, "욋"}, {0x43, "욍"}, {0x44, "요"}, {0x45, "욕"}, {0x46, "욘"}, {0x47, "욜"}, {0x48, "욤"}, {0x49, "욥"}, {0x4A, "욧"}, {0x4B, "용"}, {0x4C, "우"}, {0x4D, "욱"}, {0x4E, "운"}, {0x4F, "울"},
{0x60, "욹"}, {0x61, "욺"}, {0x62, "움"}, {0x63, "웁"}, {0x64, "웃"}, {0x65, "웅"}, {0x66, "워"}, {0x67, "웍"}, {0x68, "원"}, {0x69, "월"}, {0x6A, "웜"}, {0x6B, "웝"}, {0x6C, "웠"}, {0x6D, "웡"}, {0x6E, "웨"},
{0x71, "웩"}, {0x72, "웬"}, {0x73, "웰"}, {0x74, "웸"}, {0x75, "웹"}, {0x76, "웽"}, {0x77, "위"}, {0x78, "윅"}, {0x79, "윈"}, {0x7A, "윌"}, {0x7B, "윔"}, {0x7C, "윕"}, {0x7D, "윗"}, {0x7E, "윙"}, {0x7F, "유"},
{0x80, "육"}, {0x81, "윤"}, {0x82, "율"}, {0x83, "윰"}, {0x84, "윱"}, {0x85, "윳"}, {0x86, "융"}, {0x87, "윷"}, {0x88, "으"}, {0x89, "윽"}, {0x8A, "은"}, {0x8B, "을"}, {0x8C, "읆"}, {0x8D, "음"}, {0x8E, "읍"}, {0x8F, "읏"},
{0x90, "응"}, {0x91, "읒"}, {0x92, "읓"}, {0x93, "읔"}, {0x94, "읕"}, {0x95, "읖"}, {0x96, "읗"}, {0x97, "의"}, {0x98, "읜"}, {0x99, "읠"}, {0x9A, "읨"}, {0x9B, "읫"}, {0x9C, "이"}, {0x9D, "익"}, {0x9E, "인"}, {0x9F, "일"},
{0xA0, "읽"}, {0xA1, "읾"}, {0xA2, "잃"}, {0xA3, "임"}, {0xA4, "입"}, {0xA5, "잇"}, {0xA6, "있"}, {0xA7, "잉"}, {0xA8, "잊"}, {0xA9, "잎"}, {0xAA, "자"}, {0xAB, "작"}, {0xAC, "잔"}, {0xAD, "잖"}, {0xAE, "잗"}, {0xAF, "잘"},
{0xB0, "잚"}, {0xB1, "잠"}, {0xB2, "잡"}, {0xB3, "잣"}, {0xB4, "잤"}, {0xB5, "장"}, {0xB6, "잦"}, {0xB7, "재"}, {0xB8, "잭"}, {0xB9, "잰"}, {0xBA, "잴"}, {0xBB, "잼"}, {0xBC, "잽"}, {0xBD, "잿"}, {0xBE, "쟀"}, {0xBF, "쟁"},
{0xC0, "쟈"}, {0xC1, "쟉"}, {0xC2, "쟌"}, {0xC3, "쟎"}, {0xC4, "쟐"}, {0xC5, "쟘"}, {0xC6, "쟝"}, {0xC7, "쟤"}, {0xC8, "쟨"}, {0xC9, "쟬"}, {0xCA, "저"}, {0xCB, "적"}, {0xCC, "전"}, {0xCD, "절"}, {0xCE, "젊"},
{0xD1, "점"}, {0xD2, "접"}, {0xD3, "젓"}, {0xD4, "정"}, {0xD5, "젖"}, {0xD6, "제"}, {0xD7, "젝"}, {0xD8, "젠"}, {0xD9, "젤"}, {0xDA, "젬"}, {0xDB, "젭"}, {0xDC, "젯"}, {0xDD, "젱"}, {0xDE, "져"}, {0xDF, "젼"},
{0xE0, "졀"}, {0xE1, "졈"}, {0xE2, "졉"}, {0xE3, "졌"}, {0xE4, "졍"}, {0xE5, "졔"}, {0xE6, "조"}, {0xE7, "족"}, {0xE8, "존"}, {0xE9, "졸"}, {0xEA, "졺"}, {0xEB, "좀"}, {0xEC, "좁"}, {0xED, "좃"}, {0xEE, "종"}, {0xEF, "좆"},
{0xF0, "좇"}, {0xF1, "좋"}, {0xF2, "좌"}, {0xF3, "좍"}, {0xF4, "좔"}, {0xF5, "좝"}, {0xF6, "좟"}, {0xF7, "좡"}, {0xF8, "좨"}, {0xF9, "좼"}, {0xFA, "좽"}, {0xFB, "죄"}, {0xFC, "죈"}, {0xFD, "죌"}, {0xFE, "죔"}, {0xFF, "죕"},
};
private static readonly Dictionary GSC2U_KOR_8 = new Dictionary {
{0x00, "죗"}, {0x01, "죙"}, {0x02, "죠"}, {0x03, "죡"}, {0x04, "죤"}, {0x05, "죵"}, {0x06, "주"}, {0x07, "죽"}, {0x08, "준"}, {0x09, "줄"}, {0x0A, "줅"}, {0x0B, "줆"}, {0x0C, "줌"}, {0x0D, "줍"}, {0x0E, "줏"}, {0x0F, "중"},
{0x10, "줘"}, {0x11, "줬"}, {0x12, "줴"}, {0x13, "쥐"}, {0x14, "쥑"}, {0x15, "쥔"}, {0x16, "쥘"}, {0x17, "쥠"}, {0x18, "쥡"}, {0x19, "쥣"}, {0x1A, "쥬"}, {0x1B, "쥰"}, {0x1C, "쥴"}, {0x1D, "쥼"}, {0x1E, "즈"}, {0x1F, "즉"},
{0x20, "즌"}, {0x21, "즐"}, {0x22, "즘"}, {0x23, "즙"}, {0x24, "즛"}, {0x25, "증"}, {0x26, "지"}, {0x27, "직"}, {0x28, "진"}, {0x29, "짇"}, {0x2A, "질"}, {0x2B, "짊"}, {0x2C, "짐"}, {0x2D, "집"}, {0x2E, "짓"},
{0x30, "쬬"}, {0x31, "징"}, {0x32, "짖"}, {0x33, "짙"}, {0x34, "짚"}, {0x35, "짜"}, {0x36, "짝"}, {0x37, "짠"}, {0x38, "짢"}, {0x39, "짤"}, {0x3A, "짧"}, {0x3B, "짬"}, {0x3C, "짭"}, {0x3D, "짯"}, {0x3E, "짰"}, {0x3F, "짱"},
{0x40, "째"}, {0x41, "짹"}, {0x42, "짼"}, {0x43, "쨀"}, {0x44, "쨈"}, {0x45, "쨉"}, {0x46, "쨋"}, {0x47, "쨌"}, {0x48, "쨍"}, {0x49, "쨔"}, {0x4A, "쨘"}, {0x4B, "쨩"}, {0x4C, "쩌"}, {0x4D, "쩍"}, {0x4E, "쩐"}, {0x4F, "쩔"},
{0x60, "쩜"}, {0x61, "쩝"}, {0x62, "쩟"}, {0x63, "쩠"}, {0x64, "쩡"}, {0x65, "쩨"}, {0x66, "쩽"}, {0x67, "쪄"}, {0x68, "쪘"}, {0x69, "쪼"}, {0x6A, "쪽"}, {0x6B, "쫀"}, {0x6C, "쫄"}, {0x6D, "쫌"}, {0x6E, "쫍"}, {0x6F, "쫏"},
{0x70, "쫑"}, {0x71, "쫓"}, {0x72, "쫘"}, {0x73, "쫙"}, {0x74, "쫠"}, {0x75, "쫬"}, {0x76, "쫴"}, {0x77, "쬈"}, {0x78, "쬐"}, {0x79, "쬔"}, {0x7A, "쬘"}, {0x7B, "쬠"}, {0x7C, "쬡"}, {0x7D, "쭁"}, {0x7E, "쭈"}, {0x7F, "쭉"},
{0x80, "쭌"}, {0x81, "쭐"}, {0x82, "쭘"}, {0x83, "쭙"}, {0x84, "쭝"}, {0x85, "쭤"}, {0x86, "쭸"}, {0x87, "쭹"}, {0x88, "쮜"}, {0x89, "쮸"}, {0x8A, "쯔"}, {0x8B, "쯤"}, {0x8C, "쯧"}, {0x8D, "쯩"}, {0x8E, "찌"}, {0x8F, "찍"},
{0x90, "찐"}, {0x91, "찔"}, {0x92, "찜"}, {0x93, "찝"}, {0x94, "찡"}, {0x95, "찢"}, {0x96, "찧"}, {0x97, "차"}, {0x98, "착"}, {0x99, "찬"}, {0x9A, "찮"}, {0x9B, "찰"}, {0x9C, "참"}, {0x9D, "찹"}, {0x9E, "찻"},
{0xA1, "찼"}, {0xA2, "창"}, {0xA3, "찾"}, {0xA4, "채"}, {0xA5, "책"}, {0xA6, "챈"}, {0xA7, "챌"}, {0xA8, "챔"}, {0xA9, "챕"}, {0xAA, "챗"}, {0xAB, "챘"}, {0xAC, "챙"}, {0xAD, "챠"}, {0xAE, "챤"}, {0xAF, "챦"},
{0xB0, "챨"}, {0xB1, "챰"}, {0xB2, "챵"}, {0xB3, "처"}, {0xB4, "척"}, {0xB5, "천"}, {0xB6, "철"}, {0xB7, "첨"}, {0xB8, "첩"}, {0xB9, "첫"}, {0xBA, "첬"}, {0xBB, "청"}, {0xBC, "체"}, {0xBD, "첵"}, {0xBE, "첸"}, {0xBF, "첼"},
{0xC0, "쳄"}, {0xC1, "쳅"}, {0xC2, "쳇"}, {0xC3, "쳉"}, {0xC4, "쳐"}, {0xC5, "쳔"}, {0xC6, "쳤"}, {0xC7, "쳬"}, {0xC8, "쳰"}, {0xC9, "촁"}, {0xCA, "초"}, {0xCB, "촉"}, {0xCC, "촌"}, {0xCD, "촐"}, {0xCE, "촘"}, {0xCF, "촙"},
{0xD0, "촛"}, {0xD1, "총"}, {0xD2, "촤"}, {0xD3, "촨"}, {0xD4, "촬"}, {0xD5, "촹"}, {0xD6, "최"}, {0xD7, "쵠"}, {0xD8, "쵤"}, {0xD9, "쵬"}, {0xDA, "쵭"}, {0xDB, "쵯"}, {0xDC, "쵱"}, {0xDD, "쵸"}, {0xDE, "춈"}, {0xDF, "추"},
{0xE0, "축"}, {0xE1, "춘"}, {0xE2, "출"}, {0xE3, "춤"}, {0xE4, "춥"}, {0xE5, "춧"}, {0xE6, "충"}, {0xE7, "춰"}, {0xE8, "췄"}, {0xE9, "췌"}, {0xEA, "췐"}, {0xEB, "취"}, {0xEC, "췬"}, {0xED, "췰"}, {0xEE, "췸"}, {0xEF, "췹"},
{0xF0, "췻"}, {0xF1, "췽"}, {0xF2, "츄"}, {0xF3, "츈"}, {0xF4, "츌"}, {0xF5, "츔"}, {0xF6, "츙"}, {0xF7, "츠"}, {0xF8, "측"}, {0xF9, "츤"}, {0xFA, "츨"}, {0xFB, "츰"}, {0xFC, "츱"}, {0xFD, "츳"}, {0xFE, "층"},
};
private static readonly Dictionary GSC2U_KOR_9 = new Dictionary {
{0x01, "치"}, {0x02, "칙"}, {0x03, "친"}, {0x04, "칟"}, {0x05, "칠"}, {0x06, "칡"}, {0x07, "침"}, {0x08, "칩"}, {0x09, "칫"}, {0x0A, "칭"}, {0x0B, "카"}, {0x0C, "칵"}, {0x0D, "칸"}, {0x0E, "칼"}, {0x0F, "캄"},
{0x10, "캅"}, {0x11, "캇"}, {0x12, "캉"}, {0x13, "캐"}, {0x14, "캑"}, {0x15, "캔"}, {0x16, "캘"}, {0x17, "캠"}, {0x18, "캡"}, {0x19, "캣"}, {0x1A, "캤"}, {0x1B, "캥"}, {0x1C, "캬"}, {0x1D, "캭"}, {0x1E, "컁"}, {0x1F, "커"},
{0x20, "컥"}, {0x21, "컨"}, {0x22, "컫"}, {0x23, "컬"}, {0x24, "컴"}, {0x25, "컵"}, {0x26, "컷"}, {0x27, "컸"}, {0x28, "컹"}, {0x29, "케"}, {0x2A, "켁"}, {0x2B, "켄"}, {0x2C, "켈"}, {0x2D, "켐"}, {0x2E, "켑"}, {0x2F, "켓"},
{0x30, "켕"}, {0x31, "켜"}, {0x32, "켠"}, {0x33, "켤"}, {0x34, "켬"}, {0x35, "켭"}, {0x36, "켯"}, {0x37, "켰"}, {0x38, "켱"}, {0x39, "켸"}, {0x3A, "코"}, {0x3B, "콕"}, {0x3C, "콘"}, {0x3D, "콜"}, {0x3E, "콤"}, {0x3F, "콥"},
{0x40, "콧"}, {0x41, "콩"}, {0x42, "콰"}, {0x43, "콱"}, {0x44, "콴"}, {0x45, "콸"}, {0x46, "쾀"}, {0x47, "쾅"}, {0x48, "쾌"}, {0x49, "쾡"}, {0x4A, "쾨"}, {0x4B, "쾰"}, {0x4C, "쿄"}, {0x4D, "쿠"}, {0x4E, "쿡"}, {0x4F, "쿤"},
{0x60, "쿨"}, {0x61, "쿰"}, {0x62, "쿱"}, {0x63, "쿳"}, {0x64, "쿵"}, {0x65, "쿼"}, {0x66, "퀀"}, {0x67, "퀄"}, {0x68, "퀑"}, {0x69, "퀘"}, {0x6A, "퀭"}, {0x6B, "퀴"}, {0x6C, "퀵"}, {0x6D, "퀸"}, {0x6E, "퀼"},
{0x71, "큄"}, {0x72, "큅"}, {0x73, "큇"}, {0x74, "큉"}, {0x75, "큐"}, {0x76, "큔"}, {0x77, "큘"}, {0x78, "큠"}, {0x79, "크"}, {0x7A, "큭"}, {0x7B, "큰"}, {0x7C, "클"}, {0x7D, "큼"}, {0x7E, "큽"}, {0x7F, "킁"},
{0x80, "키"}, {0x81, "킥"}, {0x82, "킨"}, {0x83, "킬"}, {0x84, "킴"}, {0x85, "킵"}, {0x86, "킷"}, {0x87, "킹"}, {0x88, "타"}, {0x89, "탁"}, {0x8A, "탄"}, {0x8B, "탈"}, {0x8C, "탉"}, {0x8D, "탐"}, {0x8E, "탑"}, {0x8F, "탓"},
{0x90, "탔"}, {0x91, "탕"}, {0x92, "태"}, {0x93, "택"}, {0x94, "탠"}, {0x95, "탤"}, {0x96, "탬"}, {0x97, "탭"}, {0x98, "탯"}, {0x99, "탰"}, {0x9A, "탱"}, {0x9B, "탸"}, {0x9C, "턍"}, {0x9D, "터"}, {0x9E, "턱"}, {0x9F, "턴"},
{0xA0, "털"}, {0xA1, "턺"}, {0xA2, "텀"}, {0xA3, "텁"}, {0xA4, "텃"}, {0xA5, "텄"}, {0xA6, "텅"}, {0xA7, "테"}, {0xA8, "텍"}, {0xA9, "텐"}, {0xAA, "텔"}, {0xAB, "템"}, {0xAC, "텝"}, {0xAD, "텟"}, {0xAE, "텡"}, {0xAF, "텨"},
{0xB0, "텬"}, {0xB1, "텼"}, {0xB2, "톄"}, {0xB3, "톈"}, {0xB4, "토"}, {0xB5, "톡"}, {0xB6, "톤"}, {0xB7, "톨"}, {0xB8, "톰"}, {0xB9, "톱"}, {0xBA, "톳"}, {0xBB, "통"}, {0xBC, "톺"}, {0xBD, "톼"}, {0xBE, "퇀"}, {0xBF, "퇘"},
{0xC0, "퇴"}, {0xC1, "퇸"}, {0xC2, "툇"}, {0xC3, "툉"}, {0xC4, "툐"}, {0xC5, "투"}, {0xC6, "툭"}, {0xC7, "툰"}, {0xC8, "툴"}, {0xC9, "툼"}, {0xCA, "툽"}, {0xCB, "툿"}, {0xCC, "퉁"}, {0xCD, "퉈"}, {0xCE, "퉜"},
{0xD1, "퉤"}, {0xD2, "튀"}, {0xD3, "튁"}, {0xD4, "튄"}, {0xD5, "튈"}, {0xD6, "튐"}, {0xD7, "튑"}, {0xD8, "튕"}, {0xD9, "튜"}, {0xDA, "튠"}, {0xDB, "튤"}, {0xDC, "튬"}, {0xDD, "튱"}, {0xDE, "트"}, {0xDF, "특"},
{0xE0, "튼"}, {0xE1, "튿"}, {0xE2, "틀"}, {0xE3, "틂"}, {0xE4, "틈"}, {0xE5, "틉"}, {0xE6, "틋"}, {0xE7, "틔"}, {0xE8, "틘"}, {0xE9, "틜"}, {0xEA, "틤"}, {0xEB, "틥"}, {0xEC, "티"}, {0xED, "틱"}, {0xEE, "틴"}, {0xEF, "틸"},
{0xF0, "팀"}, {0xF1, "팁"}, {0xF2, "팃"}, {0xF3, "팅"}, {0xF4, "파"}, {0xF5, "팍"}, {0xF6, "팎"}, {0xF7, "판"}, {0xF8, "팔"}, {0xF9, "팖"}, {0xFA, "팜"}, {0xFB, "팝"}, {0xFC, "팟"}, {0xFD, "팠"}, {0xFE, "팡"}, {0xFF, "팥"},
};
private static readonly Dictionary GSC2U_KOR_A = new Dictionary {
{0x00, "패"}, {0x01, "팩"}, {0x02, "팬"}, {0x03, "팰"}, {0x04, "팸"}, {0x05, "팹"}, {0x06, "팻"}, {0x07, "팼"}, {0x08, "팽"}, {0x09, "퍄"}, {0x0A, "퍅"}, {0x0B, "퍼"}, {0x0C, "퍽"}, {0x0D, "펀"}, {0x0E, "펄"}, {0x0F, "펌"},
{0x10, "펍"}, {0x11, "펏"}, {0x12, "펐"}, {0x13, "펑"}, {0x14, "페"}, {0x15, "펙"}, {0x16, "펜"}, {0x17, "펠"}, {0x18, "펨"}, {0x19, "펩"}, {0x1A, "펫"}, {0x1B, "펭"}, {0x1C, "펴"}, {0x1D, "편"}, {0x1E, "펼"}, {0x1F, "폄"},
{0x20, "폅"}, {0x21, "폈"}, {0x22, "평"}, {0x23, "폐"}, {0x24, "폘"}, {0x25, "폡"}, {0x26, "폣"}, {0x27, "포"}, {0x28, "폭"}, {0x29, "폰"}, {0x2A, "폴"}, {0x2B, "폼"}, {0x2C, "폽"}, {0x2D, "폿"}, {0x2E, "퐁"},
{0x31, "퐈"}, {0x32, "퐝"}, {0x33, "푀"}, {0x34, "푄"}, {0x35, "표"}, {0x36, "푠"}, {0x37, "푤"}, {0x38, "푭"}, {0x39, "푯"}, {0x3A, "푸"}, {0x3B, "푹"}, {0x3C, "푼"}, {0x3D, "푿"}, {0x3E, "풀"}, {0x3F, "풂"},
{0x40, "품"}, {0x41, "풉"}, {0x42, "풋"}, {0x43, "풍"}, {0x44, "풔"}, {0x45, "풩"}, {0x46, "퓌"}, {0x47, "퓐"}, {0x48, "퓔"}, {0x49, "퓜"}, {0x4A, "퓟"}, {0x4B, "퓨"}, {0x4C, "퓬"}, {0x4D, "퓰"}, {0x4E, "퓸"}, {0x4F, "퓻"},
{0x60, "퓽"}, {0x61, "프"}, {0x62, "픈"}, {0x63, "플"}, {0x64, "픔"}, {0x65, "픕"}, {0x66, "픗"}, {0x67, "피"}, {0x68, "픽"}, {0x69, "핀"}, {0x6A, "필"}, {0x6B, "핌"}, {0x6C, "핍"}, {0x6D, "핏"}, {0x6E, "핑"}, {0x6F, "하"},
{0x70, "학"}, {0x71, "한"}, {0x72, "할"}, {0x73, "핥"}, {0x74, "함"}, {0x75, "합"}, {0x76, "핫"}, {0x77, "항"}, {0x78, "해"}, {0x79, "핵"}, {0x7A, "핸"}, {0x7B, "핼"}, {0x7C, "햄"}, {0x7D, "햅"}, {0x7E, "햇"}, {0x7F, "했"},
{0x80, "행"}, {0x81, "햐"}, {0x82, "향"}, {0x83, "허"}, {0x84, "헉"}, {0x85, "헌"}, {0x86, "헐"}, {0x87, "헒"}, {0x88, "험"}, {0x89, "헙"}, {0x8A, "헛"}, {0x8B, "헝"}, {0x8C, "헤"}, {0x8D, "헥"}, {0x8E, "헨"}, {0x8F, "헬"},
{0x90, "헴"}, {0x91, "헵"}, {0x92, "헷"}, {0x93, "헹"}, {0x94, "혀"}, {0x95, "혁"}, {0x96, "현"}, {0x97, "혈"}, {0x98, "혐"}, {0x99, "협"}, {0x9A, "혓"}, {0x9B, "혔"}, {0x9C, "형"}, {0x9D, "혜"}, {0x9E, "혠"},
{0xA1, "혤"}, {0xA2, "혭"}, {0xA3, "호"}, {0xA4, "혹"}, {0xA5, "혼"}, {0xA6, "홀"}, {0xA7, "홅"}, {0xA8, "홈"}, {0xA9, "홉"}, {0xAA, "홋"}, {0xAB, "홍"}, {0xAC, "홑"}, {0xAD, "화"}, {0xAE, "확"}, {0xAF, "환"},
{0xB0, "활"}, {0xB1, "홧"}, {0xB2, "황"}, {0xB3, "홰"}, {0xB4, "홱"}, {0xB5, "홴"}, {0xB6, "횃"}, {0xB7, "횅"}, {0xB8, "회"}, {0xB9, "획"}, {0xBA, "횐"}, {0xBB, "횔"}, {0xBC, "횝"}, {0xBD, "횟"}, {0xBE, "횡"}, {0xBF, "효"},
{0xC0, "횬"}, {0xC1, "횰"}, {0xC2, "횹"}, {0xC3, "횻"}, {0xC4, "후"}, {0xC5, "훅"}, {0xC6, "훈"}, {0xC7, "훌"}, {0xC8, "훑"}, {0xC9, "훔"}, {0xCA, "훗"}, {0xCB, "훙"}, {0xCC, "훠"}, {0xCD, "훤"}, {0xCE, "훨"}, {0xCF, "훰"},
{0xD0, "훵"}, {0xD1, "훼"}, {0xD2, "훽"}, {0xD3, "휀"}, {0xD4, "휄"}, {0xD5, "휑"}, {0xD6, "휘"}, {0xD7, "휙"}, {0xD8, "휜"}, {0xD9, "휠"}, {0xDA, "휨"}, {0xDB, "휩"}, {0xDC, "휫"}, {0xDD, "휭"}, {0xDE, "휴"}, {0xDF, "휵"},
{0xE0, "휸"}, {0xE1, "휼"}, {0xE2, "흄"}, {0xE3, "흇"}, {0xE4, "흉"}, {0xE5, "흐"}, {0xE6, "흑"}, {0xE7, "흔"}, {0xE8, "흖"}, {0xE9, "흗"}, {0xEA, "흘"}, {0xEB, "흙"}, {0xEC, "흠"}, {0xED, "흡"}, {0xEE, "흣"}, {0xEF, "흥"},
{0xF0, "흩"}, {0xF1, "희"}, {0xF2, "흰"}, {0xF3, "흴"}, {0xF4, "흼"}, {0xF5, "흽"}, {0xF6, "힁"}, {0xF7, "히"}, {0xF8, "힉"}, {0xF9, "힌"}, {0xFA, "힐"}, {0xFB, "힘"}, {0xFC, "힙"}, {0xFD, "힛"}, {0xFE, "힝"},
};
private static readonly Dictionary GSC2U_KOR_B = new Dictionary {
{0x00, "ㄱ"}, {0x01, "ㄴ"}, {0x02, "ㄷ"}, {0x03, "ㄹ"}, {0x04, "ㅁ"}, {0x05, "ㅂ"}, {0x06, "ㅅ"}, {0x07, "ㅇ"}, {0x08, "ㅈ"}, {0x09, "ㅊ"}, {0x0A, "ㅋ"}, {0x0B, "ㅌ"}, {0x0C, "ㅍ"}, {0x0D, "ㅎ"}, {0x0E, "ㄲ"}, {0x0F, "ㄸ"},
{0x10, "ㅃ"}, {0x11, "ㅆ"}, {0x12, "ㅉ"},
{0x20, "ㅏ"}, {0x21, "ㅑ"}, {0x22, "ㅓ"}, {0x23, "ㅕ"}, {0x24, "ㅗ"}, {0x25, "ㅛ"}, {0x26, "ㅜ"}, {0x27, "ㅠ"}, {0x28, "ㅡ"}, {0x29, "ㅣ"}, {0x2A, "ㅐ"}, {0x2B, "ㅒ"}, {0x2C, "ㅔ"}, {0x2D, "ㅖ"}, {0x2E, "ㅘ"}, {0x2F, "ㅙ"},
{0x30, "ㅚ"}, {0x31, "ㅝ"}, {0x32, "ㅞ"}, {0x33, "ㅟ"}, {0x34, "ㅢ"}, {0x3E, "_"}, {0x3F, "—"},
{0x60, "「"}, {0x61, "」"}, {0x62, "『"}, {0x63, "』"}, {0x64, "("}, {0x65, ")"}, {0x66, "!"}, {0x67, "?"}, {0x68, "-"}, {0x69, "~"}, {0x6A, "⋯"}, {0x6B, ","}, {0x6C, "."},
{0xF0, "0"}, {0xF1, "1"}, {0xF2, "2"}, {0xF3, "3"}, {0xF4, "4"}, {0xF5, "5"}, {0xF6, "6"}, {0xF7, "7"}, {0xF8, "8"}, {0xF9, "9"},
};
private static readonly Dictionary[] U2GSC_KOR =
{
U2GSC_KOR_0, U2GSC_KOR_1, U2GSC_KOR_2, U2GSC_KOR_3,
U2GSC_KOR_4, U2GSC_KOR_5, U2GSC_KOR_6, U2GSC_KOR_7,
U2GSC_KOR_8, U2GSC_KOR_9, U2GSC_KOR_A, U2GSC_KOR_B,
};
private static readonly Dictionary[] GSC2U_KOR =
{
GSC2U_KOR_0, GSC2U_KOR_1, GSC2U_KOR_2, GSC2U_KOR_3,
GSC2U_KOR_4, GSC2U_KOR_5, GSC2U_KOR_6, GSC2U_KOR_7,
GSC2U_KOR_8, GSC2U_KOR_9, GSC2U_KOR_A, GSC2U_KOR_B,
};
#endregion
#region Gen 3/4 Character Tables (Val->Unicode)
private static readonly ushort[] G4Values =
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388,
389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432,
433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476,
477, 478, 479, 480, 481, 488, 489, 490,
1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071,
1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089,
1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107,
1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125,
1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143,
1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179,
1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197,
1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215,
1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233,
1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251,
1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269,
1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287,
1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305,
1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323,
1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341,
1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359,
1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377,
1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395,
1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413,
1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431,
1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449,
1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467,
1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485,
1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503,
1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521,
1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539,
1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557,
1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575,
1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593,
1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611,
1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629,
1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647,
1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665,
1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683,
1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701,
1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719,
1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737,
1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755,
1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773,
1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791,
1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809,
1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827,
1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845,
1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863,
1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881,
1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899,
1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917,
1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935,
1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953,
1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971,
1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989,
1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025,
2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043,
2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061,
2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 2079,
2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2095, 2096, 2097,
2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115,
2116, 2117, 2118, 2119, 2120, 2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133,
2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151,
2152, 2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 2169,
2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 2186, 2187,
2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205,
2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223,
2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 2241,
2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 2258, 2259,
2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 2274, 2275, 2276, 2277,
2278, 2279, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295,
2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313,
2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 2331,
2332, 2333, 2334, 2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 2347, 2348, 2349,
2350, 2351, 2352, 2353, 2354, 2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 2367,
2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2384, 2385,
2386, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403,
2404, 2405, 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 2419, 2420, 2421,
2422, 2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 2439,
2440, 2441, 2442, 2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457,
2458, 2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475,
2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493,
2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511,
2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 2526, 2527, 2528, 2529,
2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547,
2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565,
2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 2581, 2582, 2583,
2584, 2585, 2586, 2587, 2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 2598, 2599, 2600, 2601,
2602, 2603, 2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619,
2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637,
2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 2654, 2655,
2656, 2657, 2658, 2659, 2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 2670, 2671, 2672, 2673,
2674, 2675, 2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691,
2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 2708, 2709,
2710, 2711, 2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727,
2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 2743, 2744, 2745,
2746, 2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 2763,
2764, 2765, 2766, 2767, 2768, 2769, 2770, 2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 2779, 2780, 2781,
2782, 2783, 2784, 2785, 2786, 2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 2797, 2798, 2799,
2800, 2801, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 2815, 2816, 2817,
2818, 2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 2835,
2836, 2837, 2838, 2839, 2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 2851, 2852, 2853,
2854, 2855, 2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871,
2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 2888, 2889,
2890, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2907,
2908, 2909, 2910, 2911, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 2923, 2924, 2925,
2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 2941, 2942, 2943,
2944, 2945, 2946, 2947, 2948, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2957, 2958, 2959, 2960, 2961,
2962, 2963, 2964, 2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979,
2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 2996, 2997,
2998, 2999, 3000, 3001, 3002, 3003, 3004, 3005, 3006, 3007, 3008, 3009, 3010, 3011, 3012, 3013, 3014, 3015,
3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 3032, 3033,
3034, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 3048, 3049, 3050, 3051,
3052, 3053, 3054, 3055, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 3063, 3064, 3065, 3066, 3067, 3068, 3069,
3070, 3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 3087,
3088, 3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 3105,
3106, 3107, 3108, 3109, 3110, 3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 3121, 3122, 3123,
3124, 3125, 3126, 3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 3137, 3138, 3139, 3140, 3141,
3142, 3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 3159,
3160, 3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 3175, 3176, 3177,
3178, 3179, 3180, 3181, 3182, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 3190, 3191, 3192, 3193, 3194, 3195,
3196, 3197, 3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213,
3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 3230, 3231,
3232, 3233, 3234, 3235, 3236, 3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 3246, 3247, 3248, 3249,
3250, 3251, 3252, 3253, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 3262, 3263, 3264, 3265, 3266, 3267,
3268, 3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285,
3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 3302, 3303,
3304, 3305, 3306, 3307, 3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 3318, 3319, 3320, 3321,
3322, 3323, 3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339,
3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357,
3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 3374, 3377,
3378, 3379, 3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395,
3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 3406, 3407, 3408, 3409, 3425, 3426, 3427, 3428,
3429, 65535
};
private static readonly ushort[] G4Chars =
{
12288, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363,
12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378,
12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393,
12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408,
12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423,
12424, 12425, 12426, 12427, 12428, 12429, 12431, 12434, 12435, 12449, 12450, 12451, 12452, 12453, 12454,
12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469,
12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484,
12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499,
12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514,
12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12527, 12530, 12531, 65296,
65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65313, 65314, 65315, 65316, 65317, 65318,
65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333,
65334, 65335, 65336, 65337, 65338, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354,
65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369,
65370, 65281, 65311, 12289, 12290, 8943, 12539, 65295, 12300, 12301, 12302, 12303, 65288, 65289, 9325, 9326,
65291, 12540, 9319, 9320, 65309, 65370, 65306, 65307, 65294, 65292, 9327, 9328, 9329, 9330, 9331, 9332, 9333,
9334, 9335, 9336, 65312, 9337, 65285, 9338, 9339, 9341, 10052, 9739, 9812, 9813, 9738, 8663, 8664, 9790, 165,
9800, 9801, 9802, 9803, 9804, 9805, 9806, 9807, 8592, 8593, 8595, 8594, 8227, 65286, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
117, 118, 119, 120, 121, 122, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
252, 253, 254, 255, 338, 339, 350, 351, 170, 186, 185, 178, 179, 36, 161, 191, 33, 63, 44, 46, 9324, 65381,
47, 8216, 8217, 8220, 8221, 8222, 12298, 12299, 40, 41, 9794, 9792, 43, 45, 42, 35, 61, 38, 126, 58, 59,
9327, 9328, 9329, 9330, 9331, 9332, 9333, 9334, 9335, 9336, 64, 9337, 37, 9338, 9339, 9340, 9341, 9342, 9343,
9344, 9345, 9346, 9347, 9348, 32, 9349, 9350, 9351, 176, 95, 65343, 44032, 44033, 44036, 44039, 44040, 44041,
44042, 44048, 44049, 44050, 44051, 44052, 44053, 44054, 44055, 44057, 44058, 44059, 44060, 44061, 44064,
44068, 44076, 44077, 44079, 44080, 44081, 44088, 44089, 44092, 44096, 44107, 44109, 44116, 44120, 44124,
44144, 44145, 44148, 44151, 44152, 44154, 44160, 44161, 44163, 44164, 44165, 44166, 44169, 44170, 44171,
44172, 44176, 44180, 44188, 44189, 44191, 44192, 44193, 44200, 44201, 44202, 44204, 44207, 44208, 44216,
44217, 44219, 44220, 44221, 44225, 44228, 44232, 44236, 44245, 44247, 44256, 44257, 44260, 44263, 44264,
44266, 44268, 44271, 44272, 44273, 44275, 44277, 44278, 44284, 44285, 44288, 44292, 44294, 44300, 44301,
44303, 44305, 44312, 44316, 44320, 44329, 44332, 44333, 44340, 44341, 44344, 44348, 44356, 44357, 44359,
44361, 44368, 44372, 44376, 44385, 44387, 44396, 44397, 44400, 44403, 44404, 44405, 44406, 44411, 44412,
44413, 44415, 44417, 44418, 44424, 44425, 44428, 44432, 44444, 44445, 44452, 44471, 44480, 44481, 44484,
44488, 44496, 44497, 44499, 44508, 44512, 44516, 44536, 44537, 44540, 44543, 44544, 44545, 44552, 44553,
44555, 44557, 44564, 44592, 44593, 44596, 44599, 44600, 44602, 44608, 44609, 44611, 44613, 44614, 44618,
44620, 44621, 44622, 44624, 44628, 44630, 44636, 44637, 44639, 44640, 44641, 44645, 44648, 44649, 44652,
44656, 44664, 44665, 44667, 44668, 44669, 44676, 44677, 44684, 44732, 44733, 44734, 44736, 44740, 44748,
44749, 44751, 44752, 44753, 44760, 44761, 44764, 44776, 44779, 44781, 44788, 44792, 44796, 44807, 44808,
44813, 44816, 44844, 44845, 44848, 44850, 44852, 44860, 44861, 44863, 44865, 44866, 44867, 44872, 44873,
44880, 44892, 44893, 44900, 44901, 44921, 44928, 44932, 44936, 44944, 44945, 44949, 44956, 44984, 44985,
44988, 44992, 44999, 45000, 45001, 45003, 45005, 45006, 45012, 45020, 45032, 45033, 45040, 45041, 45044,
45048, 45056, 45057, 45060, 45068, 45072, 45076, 45084, 45085, 45096, 45124, 45125, 45128, 45130, 45132,
45134, 45139, 45140, 45141, 45143, 45145, 45149, 45180, 45181, 45184, 45188, 45196, 45197, 45199, 45201,
45208, 45209, 45210, 45212, 45215, 45216, 45217, 45218, 45224, 45225, 45227, 45228, 45229, 45230, 45231,
45233, 45235, 45236, 45237, 45240, 45244, 45252, 45253, 45255, 45256, 45257, 45264, 45265, 45268, 45272,
45280, 45285, 45320, 45321, 45323, 45324, 45328, 45330, 45331, 45336, 45337, 45339, 45340, 45341, 45347,
45348, 45349, 45352, 45356, 45364, 45365, 45367, 45368, 45369, 45376, 45377, 45380, 45384, 45392, 45393,
45396, 45397, 45400, 45404, 45408, 45432, 45433, 45436, 45440, 45442, 45448, 45449, 45451, 45453, 45458,
45459, 45460, 45464, 45468, 45480, 45516, 45520, 45524, 45532, 45533, 45535, 45544, 45545, 45548, 45552,
45561, 45563, 45565, 45572, 45573, 45576, 45579, 45580, 45588, 45589, 45591, 45593, 45600, 45620, 45628,
45656, 45660, 45664, 45672, 45673, 45684, 45685, 45692, 45700, 45701, 45705, 45712, 45713, 45716, 45720,
45721, 45722, 45728, 45729, 45731, 45733, 45734, 45738, 45740, 45744, 45748, 45768, 45769, 45772, 45776,
45778, 45784, 45785, 45787, 45789, 45794, 45796, 45797, 45798, 45800, 45803, 45804, 45805, 45806, 45807,
45811, 45812, 45813, 45815, 45816, 45817, 45818, 45819, 45823, 45824, 45825, 45828, 45832, 45840, 45841,
45843, 45844, 45845, 45852, 45908, 45909, 45910, 45912, 45915, 45916, 45918, 45919, 45924, 45925, 45927,
45929, 45931, 45934, 45936, 45937, 45940, 45944, 45952, 45953, 45955, 45956, 45957, 45964, 45968, 45972,
45984, 45985, 45992, 45996, 46020, 46021, 46024, 46027, 46028, 46030, 46032, 46036, 46037, 46039, 46041,
46043, 46045, 46048, 46052, 46056, 46076, 46096, 46104, 46108, 46112, 46120, 46121, 46123, 46132, 46160,
46161, 46164, 46168, 46176, 46177, 46179, 46181, 46188, 46208, 46216, 46237, 46244, 46248, 46252, 46261,
46263, 46265, 46272, 46276, 46280, 46288, 46293, 46300, 46301, 46304, 46307, 46308, 46310, 46316, 46317,
46319, 46321, 46328, 46356, 46357, 46360, 46363, 46364, 46372, 46373, 46375, 46376, 46377, 46378, 46384,
46385, 46388, 46392, 46400, 46401, 46403, 46404, 46405, 46411, 46412, 46413, 46416, 46420, 46428, 46429,
46431, 46432, 46433, 46496, 46497, 46500, 46504, 46506, 46507, 46512, 46513, 46515, 46516, 46517, 46523,
46524, 46525, 46528, 46532, 46540, 46541, 46543, 46544, 46545, 46552, 46572, 46608, 46609, 46612, 46616,
46629, 46636, 46644, 46664, 46692, 46696, 46748, 46749, 46752, 46756, 46763, 46764, 46769, 46804, 46832,
46836, 46840, 46848, 46849, 46853, 46888, 46889, 46892, 46895, 46896, 46904, 46905, 46907, 46916, 46920,
46924, 46932, 46933, 46944, 46948, 46952, 46960, 46961, 46963, 46965, 46972, 46973, 46976, 46980, 46988,
46989, 46991, 46992, 46993, 46994, 46998, 46999, 47000, 47001, 47004, 47008, 47016, 47017, 47019, 47020,
47021, 47028, 47029, 47032, 47047, 47049, 47084, 47085, 47088, 47092, 47100, 47101, 47103, 47104, 47105,
47111, 47112, 47113, 47116, 47120, 47128, 47129, 47131, 47133, 47140, 47141, 47144, 47148, 47156, 47157,
47159, 47160, 47161, 47168, 47172, 47185, 47187, 47196, 47197, 47200, 47204, 47212, 47213, 47215, 47217,
47224, 47228, 47245, 47272, 47280, 47284, 47288, 47296, 47297, 47299, 47301, 47308, 47312, 47316, 47325,
47327, 47329, 47336, 47337, 47340, 47344, 47352, 47353, 47355, 47357, 47364, 47384, 47392, 47420, 47421,
47424, 47428, 47436, 47439, 47441, 47448, 47449, 47452, 47456, 47464, 47465, 47467, 47469, 47476, 47477,
47480, 47484, 47492, 47493, 47495, 47497, 47498, 47501, 47502, 47532, 47533, 47536, 47540, 47548, 47549,
47551, 47553, 47560, 47561, 47564, 47566, 47567, 47568, 47569, 47570, 47576, 47577, 47579, 47581, 47582,
47585, 47587, 47588, 47589, 47592, 47596, 47604, 47605, 47607, 47608, 47609, 47610, 47616, 47617, 47624,
47637, 47672, 47673, 47676, 47680, 47682, 47688, 47689, 47691, 47693, 47694, 47699, 47700, 47701, 47704,
47708, 47716, 47717, 47719, 47720, 47721, 47728, 47729, 47732, 47736, 47747, 47748, 47749, 47751, 47756,
47784, 47785, 47787, 47788, 47792, 47794, 47800, 47801, 47803, 47805, 47812, 47816, 47832, 47833, 47868,
47872, 47876, 47885, 47887, 47889, 47896, 47900, 47904, 47913, 47915, 47924, 47925, 47926, 47928, 47931,
47932, 47933, 47934, 47940, 47941, 47943, 47945, 47949, 47951, 47952, 47956, 47960, 47969, 47971, 47980,
48008, 48012, 48016, 48036, 48040, 48044, 48052, 48055, 48064, 48068, 48072, 48080, 48083, 48120, 48121,
48124, 48127, 48128, 48130, 48136, 48137, 48139, 48140, 48141, 48143, 48145, 48148, 48149, 48150, 48151,
48152, 48155, 48156, 48157, 48158, 48159, 48164, 48165, 48167, 48169, 48173, 48176, 48177, 48180, 48184,
48192, 48193, 48195, 48196, 48197, 48201, 48204, 48205, 48208, 48221, 48260, 48261, 48264, 48267, 48268,
48270, 48276, 48277, 48279, 48281, 48282, 48288, 48289, 48292, 48295, 48296, 48304, 48305, 48307, 48308,
48309, 48316, 48317, 48320, 48324, 48333, 48335, 48336, 48337, 48341, 48344, 48348, 48372, 48373, 48374,
48376, 48380, 48388, 48389, 48391, 48393, 48400, 48404, 48420, 48428, 48448, 48456, 48457, 48460, 48464,
48472, 48473, 48484, 48488, 48512, 48513, 48516, 48519, 48520, 48521, 48522, 48528, 48529, 48531, 48533,
48537, 48538, 48540, 48548, 48560, 48568, 48596, 48597, 48600, 48604, 48617, 48624, 48628, 48632, 48640,
48643, 48645, 48652, 48653, 48656, 48660, 48668, 48669, 48671, 48708, 48709, 48712, 48716, 48718, 48724,
48725, 48727, 48729, 48730, 48731, 48736, 48737, 48740, 48744, 48746, 48752, 48753, 48755, 48756, 48757,
48763, 48764, 48765, 48768, 48772, 48780, 48781, 48783, 48784, 48785, 48792, 48793, 48808, 48848, 48849,
48852, 48855, 48856, 48864, 48867, 48868, 48869, 48876, 48897, 48904, 48905, 48920, 48921, 48923, 48924,
48925, 48960, 48961, 48964, 48968, 48976, 48977, 48981, 49044, 49072, 49093, 49100, 49101, 49104, 49108,
49116, 49119, 49121, 49212, 49233, 49240, 49244, 49248, 49256, 49257, 49296, 49297, 49300, 49304, 49312,
49313, 49315, 49317, 49324, 49325, 49327, 49328, 49331, 49332, 49333, 49334, 49340, 49341, 49343, 49344,
49345, 49349, 49352, 49353, 49356, 49360, 49368, 49369, 49371, 49372, 49373, 49380, 49381, 49384, 49388,
49396, 49397, 49399, 49401, 49408, 49412, 49416, 49424, 49429, 49436, 49437, 49438, 49439, 49440, 49443,
49444, 49446, 49447, 49452, 49453, 49455, 49456, 49457, 49462, 49464, 49465, 49468, 49472, 49480, 49481,
49483, 49484, 49485, 49492, 49493, 49496, 49500, 49508, 49509, 49511, 49512, 49513, 49520, 49524, 49528,
49541, 49548, 49549, 49550, 49552, 49556, 49558, 49564, 49565, 49567, 49569, 49573, 49576, 49577, 49580,
49584, 49597, 49604, 49608, 49612, 49620, 49623, 49624, 49632, 49636, 49640, 49648, 49649, 49651, 49660,
49661, 49664, 49668, 49676, 49677, 49679, 49681, 49688, 49689, 49692, 49695, 49696, 49704, 49705, 49707,
49709, 49711, 49713, 49714, 49716, 49736, 49744, 49745, 49748, 49752, 49760, 49765, 49772, 49773, 49776,
49780, 49788, 49789, 49791, 49793, 49800, 49801, 49808, 49816, 49819, 49821, 49828, 49829, 49832, 49836,
49837, 49844, 49845, 49847, 49849, 49884, 49885, 49888, 49891, 49892, 49899, 49900, 49901, 49903, 49905,
49910, 49912, 49913, 49915, 49916, 49920, 49928, 49929, 49932, 49933, 49939, 49940, 49941, 49944, 49948,
49956, 49957, 49960, 49961, 49989, 50024, 50025, 50028, 50032, 50034, 50040, 50041, 50044, 50045, 50052,
50056, 50060, 50112, 50136, 50137, 50140, 50143, 50144, 50146, 50152, 50153, 50157, 50164, 50165, 50168,
50184, 50192, 50212, 50220, 50224, 50228, 50236, 50237, 50248, 50276, 50277, 50280, 50284, 50292, 50293,
50297, 50304, 50324, 50332, 50360, 50364, 50409, 50416, 50417, 50420, 50424, 50426, 50431, 50432, 50433,
50444, 50448, 50452, 50460, 50472, 50473, 50476, 50480, 50488, 50489, 50491, 50493, 50500, 50501, 50504,
50505, 50506, 50508, 50509, 50510, 50515, 50516, 50517, 50519, 50520, 50521, 50525, 50526, 50528, 50529,
50532, 50536, 50544, 50545, 50547, 50548, 50549, 50556, 50557, 50560, 50564, 50567, 50572, 50573, 50575,
50577, 50581, 50583, 50584, 50588, 50592, 50601, 50612, 50613, 50616, 50617, 50619, 50620, 50621, 50622,
50628, 50629, 50630, 50631, 50632, 50633, 50634, 50636, 50638, 50640, 50641, 50644, 50648, 50656, 50657,
50659, 50661, 50668, 50669, 50670, 50672, 50676, 50678, 50679, 50684, 50685, 50686, 50687, 50688, 50689,
50693, 50694, 50695, 50696, 50700, 50704, 50712, 50713, 50715, 50716, 50724, 50725, 50728, 50732, 50733,
50734, 50736, 50739, 50740, 50741, 50743, 50745, 50747, 50752, 50753, 50756, 50760, 50768, 50769, 50771,
50772, 50773, 50780, 50781, 50784, 50796, 50799, 50801, 50808, 50809, 50812, 50816, 50824, 50825, 50827,
50829, 50836, 50837, 50840, 50844, 50852, 50853, 50855, 50857, 50864, 50865, 50868, 50872, 50873, 50874,
50880, 50881, 50883, 50885, 50892, 50893, 50896, 50900, 50908, 50909, 50912, 50913, 50920, 50921, 50924,
50928, 50936, 50937, 50941, 50948, 50949, 50952, 50956, 50964, 50965, 50967, 50969, 50976, 50977, 50980,
50984, 50992, 50993, 50995, 50997, 50999, 51004, 51005, 51008, 51012, 51018, 51020, 51021, 51023, 51025,
51026, 51027, 51028, 51029, 51030, 51031, 51032, 51036, 51040, 51048, 51051, 51060, 51061, 51064, 51068,
51069, 51070, 51075, 51076, 51077, 51079, 51080, 51081, 51082, 51086, 51088, 51089, 51092, 51094, 51095,
51096, 51098, 51104, 51105, 51107, 51108, 51109, 51110, 51116, 51117, 51120, 51124, 51132, 51133, 51135,
51136, 51137, 51144, 51145, 51148, 51150, 51152, 51160, 51165, 51172, 51176, 51180, 51200, 51201, 51204,
51208, 51210, 51216, 51217, 51219, 51221, 51222, 51228, 51229, 51232, 51236, 51244, 51245, 51247, 51249,
51256, 51260, 51264, 51272, 51273, 51276, 51277, 51284, 51312, 51313, 51316, 51320, 51322, 51328, 51329,
51331, 51333, 51334, 51335, 51339, 51340, 51341, 51348, 51357, 51359, 51361, 51368, 51388, 51389, 51396,
51400, 51404, 51412, 51413, 51415, 51417, 51424, 51425, 51428, 51445, 51452, 51453, 51456, 51460, 51461,
51462, 51468, 51469, 51471, 51473, 51480, 51500, 51508, 51536, 51537, 51540, 51544, 51552, 51553, 51555,
51564, 51568, 51572, 51580, 51592, 51593, 51596, 51600, 51608, 51609, 51611, 51613, 51648, 51649, 51652,
51655, 51656, 51658, 51664, 51665, 51667, 51669, 51670, 51673, 51674, 51676, 51677, 51680, 51682, 51684,
51687, 51692, 51693, 51695, 51696, 51697, 51704, 51705, 51708, 51712, 51720, 51721, 51723, 51724, 51725,
51732, 51736, 51753, 51788, 51789, 51792, 51796, 51804, 51805, 51807, 51808, 51809, 51816, 51837, 51844,
51864, 51900, 51901, 51904, 51908, 51916, 51917, 51919, 51921, 51923, 51928, 51929, 51936, 51948, 51956,
51976, 51984, 51988, 51992, 52000, 52001, 52033, 52040, 52041, 52044, 52048, 52056, 52057, 52061, 52068,
52088, 52089, 52124, 52152, 52180, 52196, 52199, 52201, 52236, 52237, 52240, 52244, 52252, 52253, 52257,
52258, 52263, 52264, 52265, 52268, 52270, 52272, 52280, 52281, 52283, 52284, 52285, 52286, 52292, 52293,
52296, 52300, 52308, 52309, 52311, 52312, 52313, 52320, 52324, 52326, 52328, 52336, 52341, 52376, 52377,
52380, 52384, 52392, 52393, 52395, 52396, 52397, 52404, 52405, 52408, 52412, 52420, 52421, 52423, 52425,
52432, 52436, 52452, 52460, 52464, 52481, 52488, 52489, 52492, 52496, 52504, 52505, 52507, 52509, 52516,
52520, 52524, 52537, 52572, 52576, 52580, 52588, 52589, 52591, 52593, 52600, 52616, 52628, 52629, 52632,
52636, 52644, 52645, 52647, 52649, 52656, 52676, 52684, 52688, 52712, 52716, 52720, 52728, 52729, 52731,
52733, 52740, 52744, 52748, 52756, 52761, 52768, 52769, 52772, 52776, 52784, 52785, 52787, 52789, 52824,
52825, 52828, 52831, 52832, 52833, 52840, 52841, 52843, 52845, 52852, 52853, 52856, 52860, 52868, 52869,
52871, 52873, 52880, 52881, 52884, 52888, 52896, 52897, 52899, 52900, 52901, 52908, 52909, 52929, 52964,
52965, 52968, 52971, 52972, 52980, 52981, 52983, 52984, 52985, 52992, 52993, 52996, 53000, 53008, 53009,
53011, 53013, 53020, 53024, 53028, 53036, 53037, 53039, 53040, 53041, 53048, 53076, 53077, 53080, 53084,
53092, 53093, 53095, 53097, 53104, 53105, 53108, 53112, 53120, 53125, 53132, 53153, 53160, 53168, 53188,
53216, 53217, 53220, 53224, 53232, 53233, 53235, 53237, 53244, 53248, 53252, 53265, 53272, 53293, 53300,
53301, 53304, 53308, 53316, 53317, 53319, 53321, 53328, 53332, 53336, 53344, 53356, 53357, 53360, 53364,
53372, 53373, 53377, 53412, 53413, 53416, 53420, 53428, 53429, 53431, 53433, 53440, 53441, 53444, 53448,
53449, 53456, 53457, 53459, 53460, 53461, 53468, 53469, 53472, 53476, 53484, 53485, 53487, 53488, 53489,
53496, 53517, 53552, 53553, 53556, 53560, 53562, 53568, 53569, 53571, 53572, 53573, 53580, 53581, 53584,
53588, 53596, 53597, 53599, 53601, 53608, 53612, 53628, 53636, 53640, 53664, 53665, 53668, 53672, 53680,
53681, 53683, 53685, 53690, 53692, 53696, 53720, 53748, 53752, 53767, 53769, 53776, 53804, 53805, 53808,
53812, 53820, 53821, 53823, 53825, 53832, 53852, 53860, 53888, 53889, 53892, 53896, 53904, 53905, 53909,
53916, 53920, 53924, 53932, 53937, 53944, 53945, 53948, 53951, 53952, 53954, 53960, 53961, 53963, 53972,
53976, 53980, 53988, 53989, 54000, 54001, 54004, 54008, 54016, 54017, 54019, 54021, 54028, 54029, 54030,
54032, 54036, 54038, 54044, 54045, 54047, 54048, 54049, 54053, 54056, 54057, 54060, 54064, 54072, 54073,
54075, 54076, 54077, 54084, 54085, 54140, 54141, 54144, 54148, 54156, 54157, 54159, 54160, 54161, 54168,
54169, 54172, 54176, 54184, 54185, 54187, 54189, 54196, 54200, 54204, 54212, 54213, 54216, 54217, 54224,
54232, 54241, 54243, 54252, 54253, 54256, 54260, 54268, 54269, 54271, 54273, 54280, 54301, 54336, 54340,
54364, 54368, 54372, 54381, 54383, 54392, 54393, 54396, 54399, 54400, 54402, 54408, 54409, 54411, 54413,
54420, 54441, 54476, 54480, 54484, 54492, 54495, 54504, 54508, 54512, 54520, 54523, 54525, 54532, 54536,
54540, 54548, 54549, 54551, 54588, 54589, 54592, 54596, 54604, 54605, 54607, 54609, 54616, 54617, 54620,
54624, 54629, 54632, 54633, 54635, 54637, 54644, 54645, 54648, 54652, 54660, 54661, 54663, 54664, 54665,
54672, 54693, 54728, 54729, 54732, 54736, 54738, 54744, 54745, 54747, 54749, 54756, 54757, 54760, 54764,
54772, 54773, 54775, 54777, 54784, 54785, 54788, 54792, 54800, 54801, 54803, 54804, 54805, 54812, 54816,
54820, 54829, 54840, 54841, 54844, 54848, 54853, 54856, 54857, 54859, 54861, 54865, 54868, 54869, 54872,
54876, 54887, 54889, 54896, 54897, 54900, 54915, 54917, 54924, 54925, 54928, 54932, 54941, 54943, 54945,
54952, 54956, 54960, 54969, 54971, 54980, 54981, 54984, 54988, 54993, 54996, 54999, 55001, 55008, 55012,
55016, 55024, 55029, 55036, 55037, 55040, 55044, 55057, 55064, 55065, 55068, 55072, 55080, 55081, 55083,
55085, 55092, 55093, 55096, 55100, 55108, 55111, 55113, 55120, 55121, 55124, 55126, 55127, 55128, 55129,
55136, 55137, 55139, 55141, 55145, 55148, 55152, 55156, 55164, 55165, 55169, 55176, 55177, 55180, 55184,
55192, 55193, 55195, 55197, 4352, 4353, 4354, 4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364,
4365, 4366, 4367, 4368, 4369, 4370, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4461, 4462, 4466,
4467, 4469, 47252, 49968, 50108, 50388, 52012, 65535
};
private static readonly ushort[] G34_4E =
{
478, 351, 352, 353, 358, 359, 360, 361, 362, 363, 020, 365, 366, 369, 370, 371, // 0
415, 376, 377, 378, 368, 382, 383, 384, 046, 358, 359, 392, 393, 394, 395, 396, // 1
397, 398, 401, 402, 403, 416, 408, 409, 410, 400, 420, 419, 479, 450, 445, 003, // 2
004, 006, 008, 010, 068, 449, 072, 013, 015, 017, 019, 021, 023, 025, 027, 029, // 3
031, 033, 035, 038, 040, 042, 049, 052, 055, 058, 061, 050, 053, 056, 059, 062, // 4
036, 426, 425, 480, 481, 091, 092, 094, 096, 098, 364, 100, 102, 106, 108, 110, // 5
112, 114, 117, 119, 121, 123, 124, 125, 385, 127, 128, 131, 134, 137, 140, 396, // 6
144, 145, 146, 147, 149, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 082, // 7
084, 086, 088, 090, 148, 150, 152, 093, 095, 097, 099, 101, 103, 105, 107, 109, // 8
111, 113, 115, 118, 120, 122, 129, 132, 135, 138, 141, 130, 133, 136, 139, 142, // 9
116, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 427, 428, 430, 446, 230, // A
431, 436, 437, 434, 435, 443, 444, 424, 429, 242, 433, 299, 300, 301, 302, 303, // B
304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, // C
320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, // D
336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 289, // E
452, 355, 373, 379, 387, 405, 411 // F
};
private static readonly ushort[] G34_4J =
{
001, 003, 005, 007, 009, 011, 012, 014, 016, 018, 020, 022, 024, 026, 028, 030, // 0
032, 034, 037, 039, 041, 043, 044, 045, 046, 047, 048, 051, 054, 057, 060, 063, // 1
064, 065, 066, 067, 069, 071, 073, 074, 075, 076, 077, 078, 079, 080, 081, 002, // 2
004, 006, 008, 010, 068, 070, 072, 013, 015, 017, 019, 021, 023, 025, 027, 029, // 3
031, 033, 035, 038, 040, 042, 049, 052, 055, 058, 061, 050, 053, 056, 059, 062, // 4
036, 083, 085, 087, 089, 091, 092, 094, 096, 098, 100, 102, 104, 106, 108, 110, // 5
112, 114, 117, 119, 121, 123, 124, 125, 126, 127, 128, 131, 134, 137, 140, 143, // 6
144, 145, 146, 147, 149, 151, 153, 154, 155, 156, 157, 158, 159, 160, 161, 082, // 7
084, 086, 088, 090, 148, 150, 152, 093, 095, 097, 099, 101, 103, 105, 107, 109, // 8
111, 113, 115, 118, 120, 122, 129, 132, 135, 138, 141, 130, 133, 136, 139, 142, // 9
116, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 225, 226, 228, 241, 230, // A
229, 234, 235, 232, 233, 443, 444, 424, 430, 242, 433, 172, 173, 174, 175, 176, // B
177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, // C
193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, // D
209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 289, // E
452, 355, 373, 379, 387, 405, 411 // F
};
#endregion
private static readonly Dictionary G4ValueId = G4Values
.Select((value, index) => new {value, index})
.ToDictionary(pair => pair.value, pair => pair.index);
private static readonly Dictionary G4CharId = G4Chars
.Select((value, index) => new {value, index})
.GroupBy(z => z.value).Select(z => z.First()) // 65370 & 9327-9341 are in there twice?
.ToDictionary(pair => pair.value, pair => pair.index);
#region Gen 7 Chinese Character Tables
private static readonly char[] Gen7_CHS = Util.GetStringList("Char", "zh")[0].ToCharArray();
private const ushort Gen7_CHS_Ofs = 0xE800;
private static readonly char[] Gen7_CHT = Util.GetStringList("Char", "zh2")[0].ToCharArray();
private const ushort Gen7_CHT_Ofs = 0xEB0F;
#endregion
///
/// Trash Bytes for Generation 3->4
///
/// String buffers are reused, data is not cleared which yields the trash bytes.
public static readonly byte[][] G4TransferTrashBytes = {
new byte[] { }, // Unused
new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
new byte[] { 0x18, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xA1, 0x0C, 0x02, 0xE0, 0xFF },
new byte[] { 0x74, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA1, 0x0C, 0x02, 0xE0, 0xFF },
new byte[] { 0x54, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0xA1, 0x0C, 0x02, 0xE0, 0xFF },
new byte[] { 0x74, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA1, 0x0C, 0x02, 0xE0, 0xFF },
new byte[] { }, // Unused
new byte[] { 0x74, 0x20, 0x0D, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xA1, 0x0C, 0x02, 0xE0, 0xFF },
};
///
/// Converts full width to single width
///
/// Input string to sanitize.
///
private static string SanitizeString(string str)
{
if (str.Length == 0)
return str;
var s = str.Replace("\u2019", "\u0027"); // farfetch'd
s = s.Replace("\uE08F", "\u2640"); // ♀ (gen6+)
s = s.Replace("\uE08E", "\u2642"); // ♂ (gen6+)
s = s.Replace("\u246E", "\u2640"); // ♀ (gen5)
s = s.Replace("\u246D", "\u2642"); // ♂ (gen5)
return s;
}
///
/// Converts full width to half width when appropriate
///
/// Input string to set.
///
///
///
///
private static string UnSanitizeString(string str, int generation, int species = -1, bool nicknamed = true)
{
var s = str;
if (generation >= 6)
s = str.Replace("\u0027", "\u2019"); // farfetch'd
if (generation == 5 || generation == 4)
{
s = s.Replace("\u2640", "\u246E"); // ♀
s = s.Replace("\u2642", "\u246D"); // ♂
return s;
}
bool foreign = true;
if ((species == 029 || species == 032) && !nicknamed)
foreign = str[0] != 'N'; // idoran
else if (nicknamed)
foreign = str.Select(c => c >> 12).Any(c => c != 0 && c != 0xE);
// Convert back to half width
if (foreign)
return s;
s = s.Replace("\u2640", "\uE08F"); // ♀
s = s.Replace("\u2642", "\uE08E"); // ♂
return s;
}
///
/// Trims a string at the first instance of a 0xFFFF terminator.
///
/// String to trim.
/// Trimmed string.
public static string TrimFromFFFF(string input)
{
int index = input.IndexOf((char)0xFFFF);
return index < 0 ? input : input.Substring(0, index);
}
///
/// Strips diacritics on gen1-4 french pkm names
///
/// String to clean
/// Cleaned string
/// Only 4 characters are accented in gen1-4
public static string StripDiacriticsFR4(string input)
{
var result = new StringBuilder(input.Length);
foreach (var c in input)
result.Append(FrDiacritic.TryGetValue(c, out char o) ? o : c);
return result.ToString();
}
private static readonly Dictionary FrDiacritic = new Dictionary
{
{ 'È', 'E' },
{ 'É', 'E' },
{ 'Ê', 'E' },
{ 'Ï', 'I' },
};
}
}