سؤال

والحاجة لاستخراج الطابع الأولي من الكلمة الكورية في MS-Excel و MS-الوصول. عند استخدام اليسار ( "한글"، 1) فإنه سيعود أول مقطع لفظي أي بمعنى 한، ما احتاج اليه هو الطابع الأولي أي بمعنى ㅎ. هل هناك وظيفة للقيام بذلك؟ أو على الأقل لغة؟

إذا كنت تعرف كيفية الحصول على قيمة Unicode من سلسلة سأكون قادرة على العمل بها من هناك ولكن أنا متأكد من أنني سأكون إعادة اختراع العجلة. (مرة أخرى)

هل كانت مفيدة؟

المحلول

وأعتقد أن ما كنت تبحث عن صفيف بايت خافت aByte () كما بايت aByte = "한글" يجب أن تعطيك القيم يونيكود اثنين لكل حرف في السلسلة

نصائح أخرى

تنويه: أنا أعرف القليل عن Access أو VBA، ولكن ما كنت تواجه مشكلة يونيكود العامة، انها ليست محددة لتلك الأدوات. I retagged سؤالك لإضافة علامات ذات الصلة بهذه القضية.

والوصول يفعل الشيء الصحيح من خلال العودة 한، هو في الواقع الحرف الأول من هذه السلسلة المكون من حرفين. ما الذي تريد هنا هو الكنسي التحلل هذا الهانغل في jamos المكونة لها، والمعروف أيضا باسم التطبيع نموذج D (NFD)، ل "متحللة". شكل NFD هو ᄒ ᅡ ᆫ، منها الحرف الأول هو ما تريد.

ملحوظة أيضا أنه في المثال الخاص بك، يبدو أنك تريد وظيفة لإعادة الهانغل يعادل (ㅎ) لJAMO (ᄒ) - هناك حقا نقطتين الرموز مختلفة لأنها تمثل وحدة دلالية مختلفة (أ كاملة مقطع الهانغول مقطع أو جزء من الهانغل). ليس هناك رسم الخرائط محددة مسبقا من الأول إلى الثاني، يمكن أن تكتب وظيفة صغيرة لهذا الغرض، كما يقتصر عدد jamos إلى بضعة عشرات (ويتم العمل الحقيقي في الوظيفة الأولى، NFD).

وإضافة إلى إجابة ممتازة آرثر، أريد أن أشير إلى أن استخراج JAMO من المقاطع الهانجول واضح وصريح للغاية من هذا المعيار. في حين أن الحل ليس تحديدا إلى Excel أو Access (هو وحدة بيثون)، فإنه ينطوي فقط التعبيرات الحسابية لذلك يجب أن تترجم بسهولة إلى لغات أخرى. الصيغ، كما يمكن أن يرى، مماثلة لتلك الموجودة في الصفحة 109 من معيار . يتم إرجاع التحلل باعتبارها الصفوف (tuple) من <الإضراب> الأعداد الصحيحة سلاسل المشفرة، التي يمكن التحقق منها بسهولة لتتوافق مع في هانغول الرمز جامو الرسم البياني .

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

وهذا هو الإخراج في وحدة التحكم الخاصة بي:

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

وأفترض أنك حصلت على ما كنت في حاجة، ولكن يبدو الملتوية إلى حد ما. أنا لا أعرف شيئا عن هذا، ولكن لم مؤخرا بعض التحقيق في التعامل مع يونيكود، وبحثت في جميع وظائف بايت سلسلة، مثل LeftB ()، RIGHTB ()، InputB ()، InStrB ()، LenB ()، ASCB ()، ChrB () وام اى دى بى ()، وهناك أيضا StrConv ()، والتي لديها حجة vbUnicode. وهذه كلها وظائف ان كنت تعتقد أن استخدامها في أي سياق مزدوجة البايت، ولكن بعد ذلك، وأنا لا عمل في تلك البيئة لذلك قد يكون في عداد المفقودين شيء مهم جدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top