• ベストアンサー

文字コード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
質問者

お礼

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