Pergunta

Precisa extrair o caráter inicial de uma palavra coreana em MS-Excel e MS-ACCESS. Quando eu uso a esquerda ("한글", 1), ele retornará a primeira sílaba, ou seja, o que eu preciso é o personagem inicial, ou seja, ㅎ. Existe uma função para fazer isso? Ou pelo menos um idioma?

Se você souber como obter o valor Unicode da string, eu poderá resolver a partir daí, mas tenho certeza de que estarei reinventando a roda. (ainda denovo)

Foi útil?

Solução

Eu acho que o que você está procurando é uma matriz de bytes dim abyte () como byte abyte = "한글" deve fornecer os dois valores unicode para cada caractere na string

Outras dicas

Isenção de responsabilidade: eu sei pouco sobre acesso ou VBA, mas o que você está tendo é um problema de unicode genérico, não é específico para essas ferramentas. Eu reformulei sua pergunta para adicionar tags relacionadas a esse problema.

O acesso está fazendo a coisa certa retornando 한, é realmente o primeiro personagem dessa sequência de dois caracteres. O que você quer aqui é o decomposição canônica Desse hangul em seu jamos constituinte, também conhecido como formulário de normalização D (NFD), para "decompostos". O formulário NFD é ᄒ ‌ ᅡ ‌ ᆫ, do qual o primeiro personagem é o que você deseja.

Observe também que, de acordo com o seu exemplo, você parece querer uma função devolver o Hangul equivalente (ㅎ) para o JAMO (ᄒ)-existem realmente dois pontos de código diferentes porque eles representam diferentes unidades semânticas (uma sílaba de hangul de pleno direito, ou uma parte de um hangul). Não há mapeamento predefinido do primeiro para o último, você pode escrever uma pequena função nesse sentido, pois o número de JAMOS é limitado a algumas dezenas (o trabalho real é realizado na primeira função, NFD).

Além da excelente resposta de Arthur, quero ressaltar que a extração do JAMO das sílabas Hangeul é muito direta do padrão. Embora a solução não seja específica para se destacar ou acessar (é um módulo Python), envolve apenas expressões aritméticas, portanto deve ser facilmente traduzida para outros idiomas. As fórmulas, como pode ser visto, são idênticas às da página 109 do padrão. A decomposição é devolvida como uma tupla de Inteiros cordas codificadas, que podem ser facilmente verificadas para corresponder ao HANGUL JAMO Código Cabe.

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

Esta é a saída no meu console:

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

Suponho que você tenha o que precisava, mas parece bastante complicado. Não sei nada sobre isso, mas recentemente fiz algumas investigando o manuseio do Unicode e analisei todas as funções de byte de string, como Leftb (), RightB (), InputB (), Instrb (), Lenb (), ASCB (), Chrb () e Midb (), e também há StrConv (), que tem um argumento vbunicode. Todas essas são funções que eu acho que seriam usadas em qualquer contexto de duplo bytes, mas não trabalho nesse ambiente, por isso pode estar perdendo algo muito importante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top