需要在 MS-Excel 和 MS-Access 中从韩语单词中提取首字母。当我使用 Left("한글",1) 时,它将返回第一个音节,即 한,我需要的是初始字符,即 ㅎ 。有这样做的功能吗?或者至少是一个成语?
如果您知道如何从字符串中获取 Unicode 值,我就可以从那里解决它,但我确信我会重新发明轮子。(再次)
需要在 MS-Excel 和 MS-Access 中从韩语单词中提取首字母。当我使用 Left("한글",1) 时,它将返回第一个音节,即 한,我需要的是初始字符,即 ㅎ 。有这样做的功能吗?或者至少是一个成语?
如果您知道如何从字符串中获取 Unicode 值,我就可以从那里解决它,但我确信我会重新发明轮子。(再次)
免责声明:我对 Access 或 VBA 知之甚少,但您遇到的是一个通用的 Unicode 问题,它并不特定于这些工具。我重新标记了您的问题以添加与此问题相关的标签。
Access 通过返回 한 做正确的事情,它确实是那个两个字符串的第一个字符。你在这里想要的是这个韩文在其组成 jamos 中的规范分解,也称为规范化表格 D (NFD),用于“分解”。NFD 形式是 ᄒ ᅡ ᆫ,其中第一个字符就是你想要的。
另请注意,根据您的示例,您似乎希望一个函数为jamo(ᄒ)返回等效的韩文(ㅎ) - 确实有两个不同的代码点,因为它们代表不同的语义单元(一个成熟的韩文音节,或韩文的一部分)。没有从前者到后者的预定义映射,你可以写一个小函数来达到这个效果,因为 jamos 的数量被限制在几十个(真正的工作是在第一个函数 NFD 中完成的)。
除了 Arthur 的出色回答之外,我想指出从韩文音节中提取 jamo 从标准中非常简单。虽然该解决方案并非特定于 Excel 或 Access(它是一个 Python 模块),但它只涉及算术表达式,因此应该很容易翻译成其他语言。可以看出,这些公式与标准第 109 页中的公式相同。分解作为整数编码字符串的元组返回,可以很容易地验证它对应于Hangul Jamo Code Chart。
# -*- encoding: utf-8 -*-
SBase = 0xAC00
LBase = 0x1100
VBase = 0x1161
TBase = 0x11A7
SCount = 11172
LCount = 19
VCount = 21
TCount = 28
NCount = VCount * TCount
def decompose(syllable):
global SBase, LBase, VBase, TBase, SCount, LCount, VCount, TCount, NCount
S = ord(syllable)
SIndex = S - SBase
L = LBase + SIndex / NCount
V = VBase + (SIndex % NCount) / TCount
T = TBase + SIndex % TCount
if T == TBase:
result = (L,V)
else:
result = (L,V,T)
return tuple(map(unichr, result))
if __name__ == '__main__':
test_values = u'항가있닭넓짧'
for syllable in test_values:
print syllable, ':',
for s in decompose(syllable): print s,
print
这是我控制台中的输出:
항 : ᄒ ᅡ ᆼ
가 : ᄀ ᅡ
있 : ᄋ ᅵ ᆻ
닭 : ᄃ ᅡ ᆰ
넓 : ᄂ ᅥ ᆲ
짧 : ᄍ ᅡ ᆲ
我认为您正在寻找的是 Byte Array Dim aByte() as byte aByte="한글" 应该为您提供字符串中每个字符的两个 unicode 值
我假设你得到了你需要的东西,但这似乎相当复杂。我对此一无所知,但最近对处理 Unicode 进行了一些调查,并查看了所有字符串 Byte 函数,例如 LeftB()、RightB()、InputB()、InStrB()、LenB()、AscB ()、ChrB() 和 MidB(),还有 StrConv(),它有一个 vbUnicode 参数。这些都是我认为可以在任何双字节上下文中使用的函数,但是,我不在那个环境中工作,所以可能会遗漏一些非常重要的东西。