如何通过ISO语言代码在Python中获取对应语言的Unicode字符及替代方案
获取ISO语言代码对应的Unicode字符
直接通过ISO语言代码(比如de)获取对应语言的所有Unicode字符其实没有直接的API,因为Unicode的分类逻辑是基于**脚本(Script)**而非自然语言——比如德语用Latin脚本,但Latin脚本同时被英语、法语、西班牙语等数十种语言共享;反过来,有些语言可能使用多种脚本(比如日语同时用汉字、平假名、片假名)。不过我们可以通过两步间接实现你的需求:先从ISO语言代码映射到对应的脚本,再获取该脚本下的所有Unicode字符。
第一步:从ISO语言代码获取对应的脚本名称
我们可以用pycountry库来实现语言代码到脚本的映射,这个库维护了标准的ISO语言和脚本数据。
首先安装依赖:
pip install pycountry
然后用以下代码获取脚本名称:
import pycountry def lang_code_to_script(lang_code): try: # 通过ISO 639-2的二位码获取语言对象 language = pycountry.languages.get(alpha_2=lang_code) # 提取脚本名称(比如德语对应的是Latin) return language.script.name if hasattr(language, 'script') else None except LookupError: # 如果语言代码无效,返回None return None # 测试德语代码de print(lang_code_to_script('de')) # 输出: Latin
如果你的需求需要支持更多边缘语言,也可以考虑langcodes库,它的语言-脚本映射更全面,用法类似。
第二步:通过脚本名称获取所有Unicode字符
拿到脚本名称后,我们可以遍历所有Unicode码点,用unicodedata模块判断每个字符所属的脚本,筛选出目标脚本的字符。
注意:unicodedata.script()返回的是脚本的缩写代码(比如Latin对应Latn),所以我们需要先建立缩写和全称的映射,确保匹配准确:
import unicodedata import sys # 脚本缩写到全称的映射(可以根据需求扩展) SCRIPT_CODE_MAP = { 'Latn': 'Latin', 'Cyrl': 'Cyrillic', 'Grek': 'Greek', 'Hans': 'Simplified Chinese', 'Hant': 'Traditional Chinese', 'Kana': 'Katakana', 'Hira': 'Hiragana' } def get_chars_for_script(script_name): target_script = script_name.lower() script_chars = [] # 遍历所有Unicode码点(sys.maxunicode包含了所有Unicode字符) for codepoint in range(sys.maxunicode + 1): char = chr(codepoint) try: # 获取字符的脚本缩写 script_code = unicodedata.script(char) # 转成全称,若不在映射表则直接用缩写 script_full_name = SCRIPT_CODE_MAP.get(script_code, script_code).lower() if script_full_name == target_script: script_chars.append(char) except ValueError: # 部分控制字符或特殊字符没有脚本信息,直接跳过 continue return script_chars # 测试获取Latin脚本的所有字符 latin_chars = get_chars_for_script('Latin') # 打印前10个字符看看 print(latin_chars[:10]) # 输出: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
补充说明
- 这种方法会返回该脚本的全部Unicode字符,比如Latin脚本包含德语的
ß、法语的é、西班牙语的ñ等,如果你需要筛选出某语言特有的字符,还需要额外的规则(比如结合语言的字符集标准)。 - 有些字符可能属于多个脚本,或者没有明确的脚本归属,这类字符会被跳过。
内容的提问来源于stack exchange,提问作者Gokul NC
相关产品推荐
相关产品推荐

