Python中如何判断一个字符是全角还是半角?

如题, 怎么判断一个字符是否为全角还是半角? 多谢您的回复!


Python中如何判断一个字符是全角还是半角?
9 回复

ord 一下 看是不是在 255 以下?


def is_fullwidth(char):
    """
    判断单个字符是否为全角字符
    全角字符的Unicode范围:
    - 全角字母数字符号:FF00-FFEF
    - 全角平假名/片假名:3040-309F, 30A0-30FF
    - 全角中文标点:3000-303F
    - CJK统一表意文字:4E00-9FFF(基本汉字)
    - 扩展A区:3400-4DBF
    """
    code = ord(char)
    
    # 主要全角字符范围
    fullwidth_ranges = [
        (0xFF00, 0xFFEF),     # 全角字母数字
        (0x3000, 0x303F),     # 中文标点
        (0x3040, 0x309F),     # 平假名
        (0x30A0, 0x30FF),     # 片假名
        (0x4E00, 0x9FFF),     # 基本汉字
        (0x3400, 0x4DBF),     # 扩展A区汉字
    ]
    
    for start, end in fullwidth_ranges:
        if start <= code <= end:
            return True
    
    # 检查其他全角字符(如全角空格)
    if char == ' ':  # 全角空格
        return True
        
    return False

def is_halfwidth(char):
    """
    判断是否为半角字符
    半角字符主要是ASCII字符和部分标点
    """
    code = ord(char)
    # ASCII字符(0-127)都是半角
    if code <= 127:
        return True
    
    # 半角片假名范围(FF65-FF9F)
    if 0xFF65 <= code <= 0xFF9F:
        return True
    
    return False

# 测试示例
test_chars = ['A', 'a', '1', '1', ',', ',', '。', '.', 'あ', 'ア', '中', ' ', ' ']

print("字符 | 全角 | 半角")
print("-" * 25)
for char in test_chars:
    full = is_fullwidth(char)
    half = is_halfwidth(char)
    print(f"'{char}' | {full} | {half}")

# 实际使用示例
def analyze_string(text):
    """分析字符串中的全角/半角字符分布"""
    results = []
    for i, char in enumerate(text):
        char_type = "全角" if is_fullwidth(char) else "半角"
        results.append((i, char, char_type, hex(ord(char))))
    return results

# 示例分析
sample = "Hello世界!123"
analysis = analyze_string(sample)
for idx, char, char_type, code in analysis:
    print(f"位置{idx}: '{char}' -> {char_type} (Unicode: {code})")

这个实现的核心是通过Unicode码点范围判断。全角字符主要分布在几个特定区间:FF00-FFEF(全角字母数字)、3000-303F(中文标点)、4E00-9FFF(基本汉字)等。半角字符主要是ASCII字符(0-127)和半角片假名(FF65-FF9F)。

注意一个字符不能同时是全角和半角,但有些字符可能既不在全角范围也不在半角范围(如一些特殊符号)。实际使用时可以根据需要调整范围判断。

简单说就是查Unicode码点范围。

判断字符宽度

按编码

ASCII 大于 128

参考 http://stackoverflow.com/questions/10959227/how-to-distinguish-whether-a-word-is-half-width-or-full-width

半角字符使用 ord 返回对应的值, 全角字符使用 ord 会报异常.

也可以使用 unicode 值判断

转为 gb18030 编码,然后查看长度,等于 2 的就是全角,等于 1 的就是半角,这也是全角半角的本意吧

使用 len() 方法,返回字符长度,长度为 1 的是半角,长度为 2 为全角。

不知这样是否可行?

import unicodedata

unicodedata.east_asian_width(‘我’) # W (宽)
unicodedata.east_asian_width(‘i’) # Na (窄)

回到顶部