HZK
@HZK (Ritoku Sakamae)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Python: 文字列扱いのトランプ記号の文字数について

解決したいこと

マックを使用しており、文字列扱いとなっているトランプの記号を見つけました。
画像上は1つの記号ですが、len()でみると2文字扱いとなっています。
1文字目はトランプの記号を示しますが、2文字目と思われる見えない文字があります。調べてみても、解説はみつかりませんでした。
この現象について教えて頂ければ助かります。

該当するソースコード

#!/usr/bin/env python
# -*- coding: utf-8 -*-
suits = ["♠︎", "♥︎","♦︎", "♣︎"]
spd = "♠︎"

print(spd)
print(type(spd))
print(spd == "♠︎")

print(len(spd))
print(spd[0])
print(spd[0] == "♠︎")
print(spd[0:2] == "♠︎")

以下のように出力されます

♠︎
<class 'str'>
True
2
♠
False
True
0

2Answer

「2文字目と思われる見えない文字」の正体は、異体字セレクタです。

以下のコードを実行すると、

spd = "♠︎"
print(f"U+{ord(spd[0]):04X} U+{ord(spd[1]):04X}")

以下のように表示されます。

U+2660 U+FE0E

U+2660がスペードの記号で、U+FE0Eが異体字セレクタです。

記号の一部には、「テキスト・スタイル」(♠︎)と「絵文字スタイル」(♠️)の2種類の見た目が存在するものがあり、「テキスト・スタイル」だと明示したいならU+FE0Eを、「絵文字スタイル」だと明示したいならU+FE0Fを後ろにつけるルールだそうです。

詳細は、以下を参照してください。
https://moji-memo.hatenablog.jp/entry/20120802/1343876603

4Like

絵文字の扱いにおける異体字セレクタ役割につきよく理解できました。この用語を知ることができ、とても感謝しています。

0Like

Your answer might help someone💌