以下の内容はhttps://hikalium.hatenablog.jp/entry/2025/08/31/003338より取得しました。


UTF-8 範囲外の文字がLinux kernel のコミットタイトルに出てくることがあるので気をつけよう

みんなが知ってるそのスマホにも密かに流れる、そうLinux kernel.

最近はそのコミットを眺める機会が多いのですが、色々調べていたら面白い点を見つけたので紹介します。

UTF-8として有効ではないコミットタイトル

いまから137万コミットほど前のこと、2006年のコミットタイトルに、UTF-8の範囲外の文字が含まれていました。(don<B4>tと書いてある部分がそれです。)

commit d354d9afe923eb08f7ee89128b38ddb6415de01d
Author: Knut Petersen <Knut_Petersen@t-online.de>
Date:   Sat Jan 7 10:22:04 2006 +0100

    [PATCH] fbcon: don<B4>t call set_par() in fbcon_init() if vc_mode == KD_GRAPHICS
    
    Nothing prevents a user to modprobe a framebuffer driver from e.g.  the
    xterm prompt.  As a result, the set_par() function of the driver will be
    called from fbcon_init().
    
    This is fatal as a lot of X / framebuffer combinations are unable to
    recover from set_par() reprogramming the graphics controller in
    KD_GRAPHICS mode.
    
    It is also unnecessary as the set_par() function will be called during a
    switch to KD_TEXT anyway.  Because of this no side effects are possible.
    
    Signed-off-by: Knut Petersen <Knut_Petersen@t-online.de>
    Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Rust含め、最近のプログラミング言語は「文字列とはUTF-8文字列である」という前提をおいているので、これが原因でクラッシュするシステムとか、どこかにありそうですね…。


ちなみにmasterことLinusツリーの全コミットを調べましたが、コミットタイトルに他に非UTF-8文字列が含まれているものはなさそうでした。残念…。

ところでこの0xB4という文字の正体を調べたところ、以下のサイトに行きあたりました。Extended ASCII Table (Windows-1252) に含まれる拡張文字で、HTML的にいうと&acute;にあたるようです。

byte-tools.com

アキュート・アクセント記号は本来、発音を指示するために使われるもので、caféのように文字に添えて使うものになります。

ja.wikipedia.org

しかし当該コミットでは、単語の中での文字の省略を表現するアポストロフィーを意図してこの記号が使われてしまったようです。

ja.wikipedia.org

文字って難しいですね…


ちなみにgitのコミットメッセージのエンコーディングはコミットごとに指定可能で、以下のようにすれば表示できます。

git log --pretty='format:%h:(Encoding: "%e")' HEAD

驚くべきことに、コミットのエンコーディングが指定されているコミットは、masterのHEADから辿れる中では200個ちょっとしかありませんでした。

そして、ISO-8859-1を使っているコミットの大多数はLarry Fingerさんによるものでした。おめでとうございます!(?)

    190 (Encoding: "ISO-8859-1") Larry Finger Larry.Finger__at__lwfinger.net
      6 (Encoding: "ISO-8859-2") Jiri Kosina jkosina__at__suse.cz
      3 (Encoding: "ISO-8859-2") Uwe Kleine-König u.kleine-koenig__at__pengutronix.de
      2 (Encoding: "ISO-8859-2") Peter Huewe peterhuewe__at__gmx.de
      1 (Encoding: "ISO-8859-2") Randy Dunlap randy.dunlap__at__oracle.com
      1 (Encoding: "ISO-8859-2") Otavio Salvador otavio__at__ossystems.com.br
      1 (Encoding: "ISO-8859-2") Nick Bowler nbowler__at__elliptictech.com
      1 (Encoding: "ISO-8859-2") Michael Roth mroth__at__nessie.de
      1 (Encoding: "ISO-8859-2") Dirk Hohndel hohndel__at__infradead.org
      1 (Encoding: "ISO-8859-2") Claudio Scordino claudio__at__evidence.eu.com
      1 (Encoding: "ISO-8859-2") Anssi Hannula anssi.hannula__at__iki.fi
      1 (Encoding: "ISO-8859-2") Andrew Sharp andy.sharp__at__lsi.com
      1 (Encoding: "ISO-8859-2") Anders Larsen al__at__alarsen.net
      1 (Encoding: "ISO-8859-2") Amerigo Wang amwang__at__redhat.com
      1 (Encoding: "ISO-8859-1") Stephen Rothwell sfr__at__canb.auug.org.au

ついでにいうと、冒頭のコミットはエンコーディング未指定でした。まあそういうこともあるよね…。

$ git log -1 --pretty='format:%h: (Encoding: "%e")' d354d9afe923eb08f7ee89128b38ddb6415de01d
d354d9afe923: (Encoding: "")

参考文献はこちら。

git-scm.com

Commit log messages are typically encoded in UTF-8, but other extended ASCII encodings are also supported. This includes ISO-8859-x, CP125x and many others, but not UTF-16/32, EBCDIC and CJK multi-byte encodings (GBK, Shift-JIS, Big5, EUC-x, CP9xx etc.).

www.git-tower.com

以上、ほぼ役に立たない完全に脱線した時間の浪費をお伝えしました。ではでは。




以上の内容はhttps://hikalium.hatenablog.jp/entry/2025/08/31/003338より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14