C# 的string和StringBuilder都支持使用codepoint直接構造字符串。unicode的字符串形式一般都是’\u1234’這種轉義模式。 其中‘1234’就是unicode codepoint的16進制形式。
通過計算,可以把這種形式的字符串,直接轉化爲int32類型的codepoint。
/// <summary>
/// Get the unicode code point
/// </summary>
private static int GetUnicodeCodePoint(char c1, char c2, char c3, char c4)
{
return UnicodeCharToInt(c1) * 0x1000 +
UnicodeCharToInt(c2) * 0x100 +
UnicodeCharToInt(c3) * 0x10 +
UnicodeCharToInt(c4);
}
/// <summary>
/// Single unicode char convert to int
/// </summary>
private static int UnicodeCharToInt(char c)
{
switch (c)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return c - '0';
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
return c - 'a' + 10;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
return c - 'A' + 10;
}
throw new Exception(string.Format("Unicode char '{0}' error", c));
}
使用的時候codepoint需要強轉爲char類型。比如:
StringBuilder sb = new StringBuilder();
sb.Append((char) GetUnicodeCodePoint(c1, c2, c3, c4));