如何从VBA中的韩文string中提取字符

需要从MS-Excel和MS-Access中的韩语单词中提取初始字符。 当我使用左(“글글”,1)它将返回第一个音节,即,我需要的是初始字符,即ㅎ。 有这样的function吗? 或者至less是一个成语?

如果你知道如何从string中获得Unicode值,我可以从那里得到它,但我相信我会重新发明轮子。 (再次)

我想你要找的是一个字节数组Dim aByte()as byte aByte =“한글”应该给你两个string中每个字符的unicode值

免责声明:我对Access或VBA知之甚less,但是你所拥有的是一个通用的Unicode问题,它不是特定于那些工具的。 我重申了你的问题,添加与此问题相关的标签。

Access通过返回值来做正确的事情,这确实是这个双string的第一个字符。 你在这里想要的是这个hangul在其组成jamos,也被称为标准化表格D(NFD),“分解”的规范分解。 NFD的forms是하of,其中第一个字符就是你想要的。

还要注意的是,按照你的例子,你似乎想要一个函数返回jamo(ᄒ)的等价朝鲜语(ㅎ) – 实际上有两个不同的代码点,因为它们表示不同的语义单元(一个完整的朝鲜语音节,或者一个hangul的一部分)。 没有从前者到后者的预定义映射,你可以编写一个小函数来实现这个效果,因为jamos的数量被限制在几十个(真正的工作是在第一个函数NFD中完成的)。

加上Arthur的出色答案,我想指出从hangeul音节中提取jamo是非常简单的。 虽然该解决scheme不是特定于Excel或Access(它是一个Python模块),但它只涉及算术expression式,所以应该很容易翻译成其他语言。 可以看出,这些公式与标准第109页中的公式相同。 分解返回为整数编码string的元组,可以很容易地validation对应于韩文Jamo代码图 。

# -*- 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 

这是我的控制台中的输出:

 항 : ᄒ ᅡ ᆼ 가 : ᄀ ᅡ 있 : ᄋ ᅵ ᆻ 닭 : ᄃ ᅡ ᆰ 넓 : ᄂ ᅥ ᆲ 짧 : ᄍ ᅡ ᆲ 

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