19
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-08-23

背景

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

関連投稿

関連記事

19
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?