Macで手軽に文字コード変換

クマデジタルさんがLeopardから装備されたWidgetの開発環境
「DashCode」を使って、Widgetを作っていらっしゃるそうで。

思ったよりも簡単にWidgetが作れちゃうみたいですね。
私もLeopardが届いたら、試してみたいなぁ。

で、シフトJISからunicodeへの文字変換で頓挫されたようですが、
「iconv」っていうコマンドを使うのはダメでしょうか?

たとえば、「sjis.txt」っていう、シフトJISのファイルがあったとします。
それをunicodeに変換するおまじないは、こうです。

iconv -s -f SHIFT_JIS -t UTF-8 sjis.txt >unicode.txt

簡単なテキストファイルで試してみましたが、テキストエディタmiで
開いてみると、うまくUTF-8に変換されてました。

まぁ、実際には文字コードの判定なども必要かもしれませんが、
お役に立つなら、うれしい限りです。

ちなみに、「iconv」で変換できる文字コードの種別は以下のコマンドで
一覧表示できます。
ターミナルで試してみてください。

iconv -l

なお、今回のエントリーには、以下のサイトさんを参考にさせて
もらいました。
こういう情報を掲載してくれている方に感謝です。
http://homepage.mac.com/sdkfz164/terminal/iconv.html

(11/3 16:41追記)
---
なお、外部コマンドのJavaからのCallは「Runtime.getRuntime().exec()」を
使うようです。
私もJavaは専門外なので、きちんと検証してないのですけれど。(^^;

また、文字コードそのものから文字列への変換は、以下のWebサイトの
サンプルコードが参考になるのではないかと思います。
http://www.atmarkit.co.jp/fjava/rensai4/programer06/programer06_2.html#03

コメント

  1. Kumadigital より:

    こんにちは。
    話をはしょってしまってすみません。実は元データはSJISのテキストファイルではなく、SJISのコード値が書かれたテキストファイル(が読み込まれた配列)なんです。

    SJISのコード値が書かれたテキストを何も考えずに文字に変換しちゃうと半角文字以外が文字化けしちゃうのは、Javaの処理系がUnicodeだからですよね?

    「0x8365, 0x8358, 0x8367」 から、「テスト」という文字列が欲しいんですよね…。

    #C++の時代でプログラマ辞めてしまったのでJavaはよくわかんねぇっす。(例示していただいたコマンドラインもJavaからコールできるんでしょうか。)

  2. MacBS より:

    Kumadigitalさん、コメントありがとうございます。

    なるほど、コードから文字列への変換ですか。
    ちょっと調べてみますね。
    何か分かったら、追記したいと思います。

    あと、私もJavaは専門外なんですけど、
    外部コマンドのCallは
    Runtime.getRuntime().exec()で可能だと思います。

  3. Kumadigital より:

    【解決】…って言ってもmac側では何も解決していないのですが。どうも色々調べてみると、ShiftJIS-unicode間の変換は、自分で書くか、開発環境のライブラリを使うみたいですね。mac os x のJavaの開発環境のライブラリを眺めてみたのですが、どうもそれっぽいのが見あたらなかったので、もうmac側であがくのはやめて、Windows側でunicodeで吐き出すことにしました。
    dashcodeの日本語のわかりやすいリファレンス本が早く出ないかなと期待しています。英語のリファレンスは読むのに時間がかかって…。
    お手数をおかけしてすみませんでした。

  4. MacBS より:

    Kumadigitalさん、コメントありがとうございます。

    とりあえずWindows側で解決させたんですね。
    私もそのパターンが多いです。(笑)

    正直、MacのOSやソフトは非常に魅力的なのですが、
    こと、開発環境となると、英語のドキュメントが少数あるのみで
    とっつきにくいんですよねぇ。

    DashCodeについてはHMDTさんが出してくれるとうれしいのですが、
    今はiPhoneの開発関連に夢中でいらっしゃるようですね。

    StartMacモニターの時にも「開発者にもっと情報を」と
    Appleさんにお願いはしておいたんですよ。
    でも、あくまで最新の情報は本社が掌握してるわけですからねぇ。
    日本側ではできることが限られるのだと思います。

  5. のり より:

    Javaだと、String Class のコンストラクタで String(byte[] data, String charsetName) ってのがあったような。ここで、charsetName に “Shift_JIS” を指定すれば、byte 列から Unicode の String にしてくれるのではなかったかと。(うろ覚えなので、後はドキュメントを調べてみてください)

  6. MacBS より:

    のりさん、コメントありがとうございます。

    教えていただいたように、コンストラクタで
    コードを指定する方法もあるみたいですね。
    ほかにもCharsetDecoderというのを使う手もあるようです。

    こうやって調べてみると、Javaは奥が深いんですね。
    いつもC++ばかり使ってるので、かなり新鮮な印象です。

    Leopardを入れたら、Javaの勉強がてら、何か
    作ってみようかなぁという気に、ちょっとだけなりました。(^^;

タイトルとURLをコピーしました