💪
いまさらはしごだか対応
これは何の話?
いわゆる「はしごだか(髙)」が文字化けして困るので「高」に置き換えたいという場合があります。(JISコードで印刷コマンド指定する方式のプリンタなど)
C# でShift-JIS扱うときのツールとして整理してみました。
いまどきめったに出番ないですがw
実装コード
参考リンク
これまで異体字の適切な置換候補リストアップはあきらめていました。
@mindwoodさんの記事にたどり着き、異体字のリストを拝見しました。
自前のプログラムでも置換処理を実装したいので
C#で変換しやすいように組み込んでみたのが上記の実装コードです。
おかげさまで、はしごだか以外の文字にも対応できました。
(元記事のような完全な判定は不要だったので異体字の置換のみ移植させていただきます)
置換対象について
対象の文字は以下の部分です。
他にも必要であれば、以下の部分に追加ください。
readonly static (char ng, char ok)[] _canNotPrintChars = new (char, char)[] {
('髙','高'),('﨑','崎'),('濵','浜'),('賴','頼'),('瀨','瀬'),('德','徳'),('蓜','配'),('昻','昂'),('桒','桑'),('栁','柳'),('犾','犹'),('琪','棋'),
('裵','裴'),('魲','鱸'),('羽','羽'),('焏','丞'),('祥','祥'),('曻','昇'),('敎','教'),('澈','徹'),('曺','曹'),('黑','黒'),('塚','塚'),('閒','間'),
('彅','薙'),('匤','匡'),('冝','宜'),('埇','甬'),('鮏','鮭'),('伹','但'),('杦','杉'),('罇','樽'),('柀','披'),('﨤','返'),('寬','寛'),('神','神'),
('福','福'),('礼','礼'),('贒','賢'),('逸','逸'),('隆','隆'),('靑','青'),('飯','飯'),('飼','飼'),('緖','緒'),('埈','峻')
};
使用法
呼び出す方法ですが、引数がReadOnlySpan<char>のため文字列にAsSpan()をつけて使います。
var src = "髙﨑";
var replaced = src.AsSpan().ToSafeChars();
Debug.WriteLine(replaced);
// 高崎
その他機能
おまけでShift-Jis扱うときに頻出の機能も実装していますので参考になれば
method | comment |
---|---|
ToWide | 全角文字に置換 |
ToNarrow | 半角文字に置換 |
GetSjisByteCount | Shift-JISのbyte数取得 |
SubstringSjisByteLength | Shift-JISのbyte数で切り出し |
EncodeSjis | byte配列をShift-JIS文字に変換 |
Discussion