背景
Dockerで音を鳴らすという記事を書く際にwavファイルが必要になり、探していたら、偶然txt2wav.cなるコードを- コマンドラインからwaveファイルを作る方法 (テキストを.wavに変換) - 主に言語とシステム開発に関してで発見する。
このtxt2wav.cがShift-JISで書かれていたため、そのままclangでコンパイルして実行するとMacのターミナルでは文字化けしてしまう。
iconvでUTF-8に変換
sjisを指定すると
iconv -f sjis -t utf8 txt2wav.c >txt2wav.utf8.c
※環境によっては、コメント欄にあるようにutf8の代わりにutf-8を指定する必要があるようです。
clangでコンパイルすると
以下の様なエラーが表示される。
error: character too large for enclosing character literal type
if (src[i] == '¥¥' || src[i] == ':') {
^
cp932を指定すると良い
オリジナルはSJISとはいえ、MSのSJISなので、cp932を元のエンコーディングとして指定することで、上手く、UTF-8に変換出来た。
iconv -f cp932 -t utf8 txt2wav.c >txt2wav.utf8.c
おわりに
実は、Atom.ioで"mplus-1mn-light"をフォントファミリー指定して
いたので、円マークの横棒が一本少ない記号で表示されており、
試しにキーボードからバックスラッシュ(英語キーなので)を入力
したら、こちらはバックスラッシュのまま表示され、コードの違いに
気づくことが出来てあまりはまらなかったが、ターミナルのメッセージだけだと絶対ハマると思う。