[Python] [unicode] unicodedata だけで半角->全角の変換ができるか

# -*- coding: utf-8 -*-
"""
Unicode Standard Annex #11 East Asian Width:
    http://www.unicode.org/reports/tr11/tr11-14.html
"""
import unicodedata


def convert(s, errors=''):
    assert isinstance(s, unicode)

    result = []
    for c in s:
        #unicodedata.east_asian_width(c) == 'H'
        name = unicodedata.name(c, '')
        if name.startswith('HALFWIDTH '):
            try:
                c = unicodedata.lookup(name[10:])
            except LookupError:
                print name
                if errors != 'ignore': raise
        result.append(c)

    return ''.join(result)


if __name__ == '__main__':

    s = '''
    アイウエオ
    ァィゥェォ
    カキクケコ
    サシスセソ
    タチツテト
    ナニヌネノ
    ハヒフヘホ
    マミムメモ
    ヤ ユ ヨ
    ャ ュ ョ
    ラリルレロ
    ワ ヲ ン
    、。゙゚「」・ー
    '''
    print convert(s.decode('utf_8'), 'ignore')

を実行した結果↓

HALFWIDTH KATAKANA VOICED SOUND MARK
HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK

    アイウエオ
    ァィゥェォ
    カキクケコ
    サシスセソ
    タチツテト
    ナニヌネノ
    ハヒフヘホ
    マミムメモ
    ヤ ユ ヨ
    ャ ュ ョ
    ラリルレロ
    ワ ヲ ン
    、。゙゚「」・ー
    

変換できなかったのは↓

>>> unicodedata.name('゛'.decode('mbcs'))
'KATAKANA-HIRAGANA VOICED SOUND MARK'
>>> unicodedata.name('゜'.decode('mbcs'))
'KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK'
>>> unicodedata.name('゙'.decode('mbcs'))
'HALFWIDTH KATAKANA VOICED SOUND MARK'
>>> unicodedata.name('゚'.decode('mbcs'))
'HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK'