12
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

関連投稿

関連記事

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
12
Help us understand the problem. What are the problem?