Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

背景

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

関連投稿

関連記事

kjunichi
WebRubyがきっかけで、mrubyで実装されたhttp2サーバーのtrusterdに絡んだ事をやってみたり、ElectronのIssue眺めたり、手元で動かしたり、node.js関連。WASMも少々。投稿する記事の内容は個人の意見であり、所属する企業の見解を代表するものではありません。
https://abrakatabura.hatenablog.com/
japan-systems
「2019年に50周年を迎えたIT企業です。最先端の技術により全国の企業、官公庁、自治体に多くの実績があります。」
https://www.japan-systems.co.jp/
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