我正在尝试将韩语单词列表解构为 C# 中的字母组件。
即
输入:
루돌프사슴코
输出:
ㄹㅜㄷㅜㄹㅍㅡㅅㅏㅅㅡㅁㅋㅗ
使用
var text = "루돌프사슴코";
String a = text.Normalize(NormalizationForm.FormD);
foreach (var c in a)
{
Debug.Write(c);
}
这会产生 Hangul Jamo 字符,其中字母具有位置元素。我只想要简单的字母表。
有人有想法吗?
首先你必须了解 unicode 的工作原理。 这是关于它的精彩视频。
之后,这是关于这个确切问题的维基百科文章。以及带有反向方程的文章如何从 unicode 获取字符这里
我的解决方案:
var text = "루돌프사슴코";
Console.OutputEncoding = System.Text.Encoding.UTF8;
Console.WriteLine(Encoding.Unicode.GetByteCount(text));
foreach (var word in text)
{
Console.WriteLine($"{word} => {(int)word} => (initial) × 588 + (medial) × 28 + (final) = {word - 44032}");
}
Console.WriteLine("END");
Console.WriteLine(text.Normalize(NormalizationForm.FormD));
String a = text.Normalize(NormalizationForm.FormD);
foreach (var c in a)
{
Console.Write(c);
}
var firstWord = '루';
var tail = ((int)firstWord - 44032) % 28;
var vowel = 1 + (((int)firstWord - 44032 - tail) % 588) /28;
var lead = 1 + ((int)firstWord - 44032) / 588;
Console.WriteLine();
var leadInUnicode = LeadUnicode(lead);
Console.WriteLine(leadInUnicode);
var vowelInUnicode = VowelUnicode(vowel);
Console.WriteLine(vowelInUnicode);
var tailInUnicode = TailUnicode(tail);
Console.WriteLine(tailInUnicode);
char LeadUnicode(int lead)
{
return (char)(lead + 4351);
}
char VowelUnicode(int vowel)
{
return (char)(vowel + 4448);
}
char TailUnicode(int tail)
{
return (char)(tail + 4520);
}
有输出:
12
루 => 47336 => (initial) × 588 + (medial) × 28 + (final) = 3304
돌 => 46028 => (initial) × 588 + (medial) × 28 + (final) = 1996
프 => 54532 => (initial) × 588 + (medial) × 28 + (final) = 10500
사 => 49324 => (initial) × 588 + (medial) × 28 + (final) = 5292
슴 => 49844 => (initial) × 588 + (medial) × 28 + (final) = 5812
코 => 53076 => (initial) × 588 + (medial) × 28 + (final) = 9044
END
루돌프사슴코
루돌프사슴코
ᄅ
ᅮ
ᆨ