Вопрос

Необходимо извлечь начальный символ из корейского слова в MS-Excel и MS-Access.Когда я использую Left ("한글", 1), он вернет первый слог, то есть 한, мне нужен начальный символ, то есть ㅎ .Есть ли функция для этого?или, по крайней мере, идиома?

Если вы знаете, как получить значение Unicode из строки, я бы смог разобраться с этим оттуда, но я уверен, что мне пришлось бы изобретать велосипед заново.(еще раз)

Это было полезно?

Решение

Я думаю, что то, что вы ищете, - это массив байтов Dim aByte() как байт aByte ="한글" должно предоставить вам два значения в юникоде для каждого символа в строке

Другие советы

Отказ от ответственности:Я мало знаю о Access или VBA, но то, с чем вы столкнулись, - это общая проблема с Юникодом, она не специфична для этих инструментов.Я переназначил ваш вопрос, чтобы добавить теги, связанные с этой проблемой.

Access поступает правильно, возвращая 한, это действительно первый символ этой двухсимвольной строки.То, что вы хотите здесь, это каноническая декомпозиция этого хангыля в составляющих его джамосах, также известных как Нормализованная форма D (NFD), что означает “разложенный”.Форма NFD - это ᄒ ᅡ ᆫ, первый символ которой - это то, что вы хотите.

Обратите также внимание, что согласно вашему примеру, вы, кажется, хотите, чтобы функция возвращала эквивалентный хангыль (ㅎ) для джамо (ᄒ) – на самом деле это две разные кодовые точки, потому что они представляют разные семантические единицы (полноценный слог хангыля или часть хангыля).Нет предопределенного отображения от первого ко второму, вы могли бы написать небольшую функцию для этого, поскольку количество jamo ограничено несколькими десятками (реальная работа выполняется в первой функции, NFD).

В дополнение к превосходному ответу Артура я хочу отметить, что извлечение джамо из слогов хангыля очень просто из стандарта.Хотя решение не является специфичным для Excel или Access (это модуль Python), оно включает только арифметические выражения, поэтому его следует легко перевести на другие языки.Формулы, как можно видеть, идентичны приведенным на странице 109 стандартный.Разложение возвращается в виде кортежа из целые числа закодированные строки, которые могут быть легко проверены на соответствие Таблица кодов Хангыль Джамо.

# -*- 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 и изучил все строковые байтовые функции, такие как LeftB(), RightB(), inputB(), InStrB(), LenB(), AscB(), ChrB() и MidB(), а также StrConv(), который имеет аргумент vbUnicode.Это все функции, которые, я думаю, будут использоваться в любом двухбайтовом контексте, но с другой стороны, я не работаю в этой среде, поэтому, возможно, упускаю что-то очень важное.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top