• ベストアンサー

文字コードshift-jisへの変換について

お世話になります。 .NET C#にて開発をしております初心者です。 C#からテキストデータにデータの書き出しを行っており、 文字コードをUTF-8からSHIFT-JISへ変換したいのですが、 ネット等で確認し、記述したのですが、データの中には 半角カナ文字もあり、どうも変換がうまくいきません。 どなたかサンプルコードまたは、参考になるサイトなどを お教え頂きたく宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

#4 です どうもここでは半角カナは強制的に全角に変換されちゃうようなので、 > string orgstr = "これは文字コードの変換テストだよ。\n"; の「コード」と「テスト」は半角カナに置き換えてください。

miruchoko
質問者

お礼

いつも有難うございます。 おかげさまで、解決致しました。 また宜しくお願い致します。

その他の回答 (5)

  • ohtawa
  • ベストアンサー率23% (9/38)
回答No.6

NO3さんによると ちなみにもともと shift_jis は「半角カナ」と共存することを目的とした符号体系なので, shift_jis (の 1バイト目) は「半角カナ」を避けて配置されています そうですか 認識不足で失礼しました NO1

回答No.4

どういうコードで、どのようにうまくいかないのかわかりませんが…… 半角カナがあってもとくに問題があるようには思いませんが。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ShiftJIS { class Program { static void Main(string[] args) { // 元のデータ(Unicode) Encoding orgenc = Encoding.Unicode; string orgstr = "これは文字コードの変換テストだよ。\n"; byte[] orgbyte = orgenc.GetBytes(orgstr); // UTF-8に変換 Encoding utf8enc = Encoding.UTF8; byte[] utf8byte = Encoding.Convert(orgenc, utf8enc, orgbyte); string utf8str = utf8enc.GetString(utf8byte); File.WriteAllText("test_utf8.txt", utf8str, Encoding.UTF8); File.WriteAllBytes("test_utf8.bin", utf8byte); // Shift-JISに変換 Encoding sjisenc = Encoding.GetEncoding("Shift_JIS"); utf8byte = utf8enc.GetBytes(utf8str); byte[] sjisbyte = Encoding.Convert(utf8enc, sjisenc, utf8byte); string sjisstr = sjisenc.GetString(sjisbyte); File.WriteAllText("test_sjis.txt", sjisstr, Encoding.GetEncoding("Shift_JIS")); File.WriteAllBytes("test_sjis.bin", sjisbyte); } } }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「どうも変換がうまくいきません」ではうまくいかないことしかわかりません. 質問しているということだけで「うまくいっていない」ことは明らかなので, これでは全く意味をなしません. どう「うまくいかない」のか, もっと詳しく説明してください. たとえば「こういう入力を与えたときにこんな結果を期待したんだけど, 実際にはこのような結果になった」という例があれば, 判断のしようもあるかもしれません. 現状でいえるのは Unicode から shift_jis (でも EUC-JP でも ISO-2022-JP でも同じなんだけど) への変換は結局「表を見る」しかないわけで, その表がちゃんとできていれば「半角カナ」だってちゃんと変換できるはず くらい. ちなみにもともと shift_jis は「半角カナ」と共存することを目的とした符号体系なので, shift_jis (の 1バイト目) は「半角カナ」を避けて配置されています>#1.

回答No.2

ICONVなど、いかがでしょうか。 サンプルは、EUC->UTF8ですが UTF8->SJISも可能なはずです。 ただし、自分でDLL等をインストールする必要があります。

参考URL:
http://code.nanigac.com/source/view/20
miruchoko
質問者

お礼

有難うございました。 参考になりました。

  • ohtawa
  • ベストアンサー率23% (9/38)
回答No.1

変換する以前につぎのことを 認識する必要があります (1)SHIFT-JISからUTF-8へ変換は100%OK (2)UTF-8からSHIFT-JISへ変換は対応しない部分がある   つまり(1)の逆はかならずしも真ではない (3)半角カナ文字と SHIFT-JISの1バイトでない文字とは   かちあう   つまり  SHIFT-JISでは半角カナ文字はない(と記憶しているが)

miruchoko
質問者

お礼

早期にご回答頂き有難うございました。

関連するQ&A

  • JISコード変換について

    String str = "アイウエオ"; byte test[] = moji.getBytes("ISO2022JP"); String ret = new String(test); 上記のプログラムで半角カナをJISコードに変換すると 文字化けしているのですが、文字化けしないようにするにはどうしたらよいでしょうか。 なお、JISコードの String test = "アイウエオ"; ← "アイウエオ"はJISコード(文字化け無しの半角カナ文字) String ret = new String(test .getBytes("ISO2022JP"),"JISAutoDetect"); これで、文字化けせずUnicodeに変換できたのですが、単純に逆に変換しただけでは、半角カナの文字は、JISコードに変換すると文字化けしてしまうのでしょうか? どなたか教えて頂けないでしょうか?

    • ベストアンサー
    • Java
  • 文字コードが変わってしまう

    Webページ作成関連の市販のテキストについているサンプルコードを自分のマシンにコピーして勉強しています。WindowsXPとWindows7を使っています。 たとえば、【今日問題なく使った】のに、翌日同じHTMLファイルのソースを見たら、文字コードが矢印に変わってしまっています。 改行コード変換ソフトで変換して、また元に戻して作業をしました。 翌日、他の部屋のマシン(WinXP)でそのファイルを開いたら、また文字コードが矢印に変わっていました。 詳しいことはわからないレベルですが、状況だけ書いてみました。 文字コードが変わってしまうタイミングってあるのでしょうか。関係ないかもしれませんが、書籍についてきたサンプルファイルの文字コードはUTF-8なので、文字コード変換ソフトでShift_JISに変更しました(なぜShift_JISにしたかは、特に意味はありません。UTF8がいいというのは聞いていますが、とりあえずShift_JISでやっています)。 難しい理論は理解できないと思いますが、どうしてそうなるかを教えていただける方がいたらお願いします。

  • EUCコードをSHIFT-JISに変換したい

    宜しくお願いします。 VB2008で作成したテキストをHTMLで見たときに正常に見えるように変換がしたいのですが。 パソコン -> 繝代た繧ウ繝  化け文字です。 text1.tex にkey入力をした文字のみ化け文字です。 直接記述した文字は化けてはおりません。 多分、VB2008で作成したHTMLの漢字コードはEUCだとおもうのですが、HTMLファイルを作成して見ると文字化けをしています それでSHIFT-JISに変換を行いたいのですが、関数が分かりません。

  • UTF-8で書かれたファイルをshift-jisに変換したい

    あるフォルダの下にある複数のファイル(文字コード:UTF-8)を、shift-jisに変換するおすすめツールがありましたら教えてください。

  • cookieのテキストファイル%u3036などをshift-jisに変換

    htmlでボタンを作り、onclickでjavascriptを実行しました。 javascriptの中で、htmlのinputボックスの中身をcookieに保存しました。 その後、mydocumentの中のバッチファイルを用いてcookie内のテキストファイルを加工したいのですが、エディタで開くと%u3083というようなテキストで表示されてしまいます。 どうしたら普通に読める文字になるでしょうか? ・%u以降のコードはUTF-16であるように思います。 ・VectorにあるUTF-16→shift-jis変換をするソフトを利用しても  上手く変換できませんでした。  同じように、UTF-8→shift-jis変換も上手く変換できませんでした。 ・Windows2000でGAWKを使ってテキストを加工します。 よろしくお願いします。

  • 文字コードの変換(Shift-JISからUTF8)

    文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを 確認するとShift-JISのままです。 どなたか教えていただけないでしょうか? ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。 #!/usr/bin/perl use strict; use warnings; use utf8; use Encode; my $input_file="input.csv"; my $output_file="output.txt"; open (IN, $input_file) or die "$!"; open (OUT, ">$output_file") or die "$!"; while (<IN>){ chomp ($_); my @data=split(/,/,$_); for(my $i=0;$i<@data;$i++){ $data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換 $data[$i]=~s/\s+//g; print OUT $_; } print OUT "\n"; } close (IN); close (OUT);

    • ベストアンサー
    • Perl
  • UTF-8からShift-JISへの文字コード変換について

    文字コードがUTF-8のファイルをShift-JISに変換する方法についてご存知の方がいらっしゃれば教えていただきたいです。 仕事上で、UTF-8のファイルをしばしば受領するのですが、Shift-JISに変換しないと、その後の処理ができない作業があり、今は秀丸で開いて、文字コードを変換して保存し直してます。 私以外のメンバも今後同じ作業を実施するようになり、引継ぎ手順書を作成しているのですが、ツール等を使わないWindows標準機能を用いた手順を要求され、どうすればいいかわからなくなって質問させていただきました。 よろしくお願い致します。

  • 文字コードの変換によるレイアウト崩れ

    はじめまして。 どうしても解決できない問題があり 皆様のお知恵を拝借したく投稿させていただきました。 文字コードの変換について教えていただけませんでしょうか。 HTML、CSSをUTF-8でコーディングしましたが、 急遽Shift-JISでの納品を求められ文字コードを変換したのですが 表示レイアウトが崩れてしまい見るも無惨なデータになってしまいました。。 WindowsXPの秀丸、Macのmiをそれぞれ使用して文字コードの変換をしました。(Dreamweaver8でも試しましたがだめでした。。) このとき他のサイトにて文字コード変換時にBOMを付加しないという記述をされていたので、それに従って変換したつもりなのですが どうにもこうにもうまくいきません。。。 どうすれば上手に表示されるようになるのでしょうか。。 不しつけな質問および言葉足らずかもしれませんが、 どなたかお教えください。 よろしくお願いします!

  • 文字コードShif-JIS、UTF-8

    漢方の「瘀血」の“瘀”という文字の文字コードはUTF-8にはありますがShift-JISにはありません。html記述に作成にTeraPadを使っていますが、Shif-JISがデフォルトのようで“瘀”の文字がATOKで書き込めず、?に置き換わってしまいます。TeraPadの表示オプションの「文字コード」をUTF-8に設定しても同じです。ためしにメモ帳でやってみたところ問題なくATOKで瘀と書き込めます。TeraPadをUTF-8ベースで使うにはどうしたらいいでしょう。

  • 文字変換について

    Perlの文字変換について質問があります。 文字コードをJISからShift_JISに変換するには、下記のどれが正しい記述なのでしょうか? ・Encode::from_to($_, "jis", "shiftjis" ) ・encode("shiftjis", $_) ・encode("shiftjis", decode("utf8", $_)) 以上、よろしくお願い致します

    • ベストアンサー
    • Perl

専門家に質問してみよう