Edited at

Shift-JISのソースをiconvでUtf-8に変換してclangでエラー


背景

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"をフォントファミリー指定して

いたので、円マークの横棒が一本少ない記号で表示されており、

試しにキーボードからバックスラッシュ(英語キーなので)を入力

したら、こちらはバックスラッシュのまま表示され、コードの違いに

気づくことが出来てあまりはまらなかったが、ターミナルのメッセージだけだと絶対ハマると思う。


Link


関連投稿


関連記事