94663


" "のようなフォントを変えたわけでもないのに普通とは異なる表示ができる文字があるようなのですが、これらを普通の"Big
LOVE"のように変換する方法は無いでしょうか？  
以下のページを見るとかなりの種類あるようなので一般的な（できればJavaの）ライブラリがあるといいのですが。  
<https://appllio.com/Instagram-special-character>


CC BY-SA 4.0
2023-04-27T06:59:52.457
94662
2023-04-27T14:08:11.813
816
question
java string
" "のような特殊文字を普通の文字に変換する方法


Unicodeには [Unicode® Character Name](https://unicode.org/charts/charindex.html)
があり  
(Javaで) 名前を取得できるなら簡単に変換可能です

以下は Pythonのコード

[code]

    >>> s = " "
    >>> import unicodedata
    >>> unicodedata.name(s[0])
    'MATHEMATICAL BOLD SCRIPT CAPITAL B'
    >>>
    >>> list(map(unicodedata.name, s))
    ['MATHEMATICAL BOLD SCRIPT CAPITAL B',
     'MATHEMATICAL BOLD SCRIPT CAPITAL I',
     'MATHEMATICAL BOLD SCRIPT CAPITAL G',
     'SPACE',
     'MATHEMATICAL BOLD SCRIPT CAPITAL L',
     'MATHEMATICAL BOLD SCRIPT CAPITAL O',
     'MATHEMATICAL BOLD SCRIPT CAPITAL V',
     'MATHEMATICAL BOLD SCRIPT CAPITAL E']
    >>>
    >>> ''.join(v[-1] if v.startswith('MATHEMATICAL')else ' 'for v in map(unicodedata.name, s))
    'BIG LOVE'
    
[/code]

* * *

**(追記)**

また, 正規化というのもあり, 例えば

  * 「ごはん」,「パン」をそれぞれ 3文字, 2文字の形式 (一般的な普通の文字列)
  * 「こ」+ 濁音で「ご」, 「ハ」+ 半濁音で「パ」… (Combining Character を使用)などの形式

この"修飾された文字"列 を上側の単純な形式にするものです  
これを利用し, アルファベットを取り出すことが可能

(Pythonでの例)

[code]

    >>> unicodedata.normalize('NFKD', s)
    'BIG LOVE'
    
[/code]

(Javaでの例)

[code]

    import java.text.Normalizer;
    
    // (中略)
    System.out.println("NFKC: "+Normalizer.normalize(s, Normalizer.Form.NFKC));
    System.out.println("NFKD: "+Normalizer.normalize(s, Normalizer.Form.NFKD));
    
    // NFKC: BIG LOVE
    // NFKD: BIG LOVE
    
[/code]


CC BY-SA 4.0
2023-04-27T08:57:42.860
94663
2023-04-27T14:08:11.813
2023-04-27T14:08:11.813
43025
43025
94662
answer