おはようございます くろねこです
2026年1月18日(日)
穏やかな日曜日の朝です
午前11時の天候は晴れ☀、気温10℃、弱い北の風
風が冷たく日差しの無いところでは少し寒いです
この穏やかな日曜日、如何お過ごしですか?

今朝は7時前に起き、いろいろなことを済ませ
さきほど(自称)マシンルームに籠りました(笑)
さて、今回は開発に関するお話しです
署名
あるツールの開発案件でメールを送る機能があるのですが、ユーザから、Outlookの署名を自動で入れてほしいとの要望があったのです
メインの部分はほぼ完成の域になったので、後回しにしていた署名部分の実装をしようとして大ハマりしました
署名データの保存場所はすぐにわかり、プログラムで署名を読み込み、メール本文に追記したところ、見事に文字化けしてました
Outlookの署名データの保存先
%APPDATA%\\Microsoft\\Signatures
文字化けの状況をみた途端
「あっ!、UTF-8」なんだ! と
ツールはExcel VBA (所謂、Excelマクロ)で開発しているので扱う文字コードはShift-JISコードです
だから、署名データをShift-JISにコード変換して連結しなければなりません
変換処理の作成
ということで UTF-8 → Shift-JISの変換処理を作成することにしました
いろいろ調査し、コードを書き込み動作確認しました
しかし、結果は文字化けしたままです
試行錯誤、約2時間・・・
正しく変換できないことから
一旦、クールダウンし、違うアプローチしてみることに
そもそも、署名データはUTF-8で書かれているはどこにも記載がありません
そう、勝手にくろねこが文字化け状況で判断しただけです
ということで、署名データがどの文字コードで書かれているか確認することにしました
使ったツールは nkf というコマンドプロンプトで動作するツールです
詳細は、Vectorで「nkf.exe nkf32.dll Windows用」のキーワードで検索してください
ダウンロードし、署名ファイルをチェックしたところ
UTF-16 でした
そりゃあ、変換できないよね!
プログラムをUTF-16用に直し、実行したところ、
バッチリ署名データを読み込むことができました!
最初から、ちゃんと調べていれば、無駄な時間を費やすことなかったのにと
あとの祭りです
思い込みはダメですね💦
クールダウンから10分足らずで解決することができました
今回分かったことは署名ファイルはUTF-16で書かれていることでした
文字コードの詳細についてはものすごい量の説明になってしまいますので代表的なもののみ紹介します
UTF-8
Webシステムなどで標準的に使用されている文字コード
Shift-JIS
WindowsやMS-DOSなど幅広く使用されている文字コード
EBCDIC
(これはおまけ)
大型汎用機(メインフレーム IBMとその互換機)で使用されている文字コード
くろねこが若き日に最初に触れた文字コードです
おわりに
思い込みは恐ろしいですね
過去に何度も失敗してきたにも関わらず、繰り返してしまいました
やはり初心に帰る 重要です!

それでは
