Domanda

È necessario estrarre il carattere iniziale da una parola coreana in MS-Excel e MS-Access.Quando utilizzo Left("한글",1) restituirà la prima sillaba, ovvero 한, ciò di cui ho bisogno è il carattere iniziale, ovvero ㅎ .Esiste una funzione per farlo?o almeno un idioma?

Se sai come ottenere il valore Unicode dalla stringa, sarei in grado di risolverlo da lì, ma sono sicuro che reinventerei la ruota.(ancora una volta)

È stato utile?

Soluzione

Credo che quello che state cercando è un array di byte Dim aByte () come byte aByte = "한글" dovrebbe darvi i due valori Unicode per ogni carattere della stringa

Altri suggerimenti

Disclaimer:Conosco poco di Access o VBA, ma quello che riscontri è un problema Unicode generico, non è specifico per questi strumenti.Ho ritaggato la tua domanda per aggiungere tag relativi a questo problema.

Access sta facendo la cosa giusta restituendo 한, è infatti il ​​primo carattere di quella stringa di due caratteri.Quello che vuoi qui è il decomposizione canonica di questo hangul nel suo costituente jamos, noto anche come Forma di Normalizzazione D (NFD), per “decomposto”.La forma NFD è ᄒ ‌ᅡ ‌ᆫ, il cui primo carattere è quello che desideri.

Nota anche che, come nel tuo esempio, sembra che tu voglia che una funzione restituisca l'equivalente hangul (ㅎ) per jamo (ᄒ) – ci sono davvero due punti di codice diversi perché rappresentano unità semantiche diverse (una sillaba hangul a tutti gli effetti, o una parte di un hangul).Non esiste una mappatura predefinita dal primo al secondo, potresti scrivere una piccola funzione in tal senso, poiché il numero di jamos è limitato a poche decine (il vero lavoro viene svolto nella prima funzione, NFD).

In aggiunta a risposta eccellente di Arthur, voglio sottolineare che l'estrazione di Jamo dalle sillabe Hangeul è molto semplice da quella standard. Mentre la soluzione non è specifico di Excel o Access (è un modulo Python), si tratta solo di espressioni aritmetiche e quindi dovrebbe essere facilmente tradotto in altre lingue. Le formule, come si vede, sono identici a quelli nella pagina 109 del norma . La decomposizione viene restituito come una tupla di stringhe codificate, che può essere facilmente verificato per corrispondere al Hangul Jamo Codice Grafico .

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

Questa è l'uscita in mia console:

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

Suppongo che hai quello che avevi bisogno, ma sembra piuttosto contorta. Io non so nulla di questo, ma di recente ha fatto qualche indagine di gestire Unicode, e guardai in tutte le funzioni stringa di byte, come LeftB (), RightB (), InputB (), InStrB (), LenB (), AscB (), ChrB () e MidB (), e c'è anche StrConv (), che ha un argomento vbUnicode. Queste sono tutte le funzioni che ci avrei pensato sarebbe stato utilizzato in qualsiasi contesto doppio byte, ma poi, io non lavoro in questo ambiente così potrebbe essere mancante qualcosa di molto importante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top