3

需要在 MS-Excel 和 MS-Access 中从韩语单词中提取首字母。当我使用 Left("한글",1) 时,它将返回第一个音节,即 한,我需要的是初始字符,即 ㅎ 。有这样做的功能吗?或者至少是一个成语?

如果您知道如何从字符串中获取 Unicode 值,我就可以从那里解决它,但我确信我会重新发明轮子。(再次)

4

4 回答 4

8

免责声明:我对 Access 或 VBA 知之甚少,但您遇到的是一个通用的 Unicode 问题,它并不特定于这些工具。我重新标记了您的问题以添加与此问题相关的标签。

Access 通过返回 한 做正确的事情,它确实是那个两个字符串的第一个字符。你在这里想要的是这个韩文在其组成 jamos 中的规范分解,也称为规范化表格 D (NFD),用于“分解”。NFD 形式是 ᄒ ‌ᅡ ‌ᆫ,其中第一个字符就是你想要的。

另请注意,根据您的示例,您似乎希望一个函数为jamo(ᄒ)返回等效的韩文(ㅎ) - 确实有两个不同的代码点,因为它们代表不同的语义单元(一个成熟的韩文音节,或韩文的一部分)。没有从前者到后者的预定义映射,你可以写一个小函数来达到这个效果,因为 jamos 的数量被限制在几十个(真正的工作是在第一个函数 NFD 中完成的)。

于 2009-11-16T10:26:43.653 回答
2

除了 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

这是我控制台中的输出:

항 : ᄒ ᅡ ᆼ
가 : ᄀ ᅡ
있 : ᄋ ᅵ ᆻ
닭 : ᄃ ᅡ ᆰ
넓 : ᄂ ᅥ ᆲ
짧 : ᄍ ᅡ ᆲ
于 2011-12-25T14:19:22.020 回答
1

我认为您正在寻找的是 Byte Array Dim aByte() as byte aByte="한글" 应该为您提供字符串中每个字符的两个 unicode 值

于 2009-11-16T13:47:18.803 回答
0

我假设你得到了你需要的东西,但这似乎相当复杂。我对此一无所知,但最近对处理 Unicode 进行了一些调查,并查看了所有字符串 Byte 函数,例如 LeftB()、RightB()、InputB()、InStrB()、LenB()、AscB ()、ChrB() 和 MidB(),还有 StrConv(),它有一个 vbUnicode 参数。这些都是我认为可以在任何双字节上下文中使用的函数,但是,我不在那个环境中工作,所以可能会遗漏一些非常重要的东西。

于 2009-11-17T03:28:45.353 回答