- ベストアンサー
文字コードshift-jisへの変換について
お世話になります。 .NET C#にて開発をしております初心者です。 C#からテキストデータにデータの書き出しを行っており、 文字コードをUTF-8からSHIFT-JISへ変換したいのですが、 ネット等で確認し、記述したのですが、データの中には 半角カナ文字もあり、どうも変換がうまくいきません。 どなたかサンプルコードまたは、参考になるサイトなどを お教え頂きたく宜しくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#4 です どうもここでは半角カナは強制的に全角に変換されちゃうようなので、 > string orgstr = "これは文字コードの変換テストだよ。\n"; の「コード」と「テスト」は半角カナに置き換えてください。
その他の回答 (5)
- ohtawa
- ベストアンサー率23% (9/38)
NO3さんによると ちなみにもともと shift_jis は「半角カナ」と共存することを目的とした符号体系なので, shift_jis (の 1バイト目) は「半角カナ」を避けて配置されています そうですか 認識不足で失礼しました NO1
- magicalpass
- ベストアンサー率58% (378/648)
どういうコードで、どのようにうまくいかないのかわかりませんが…… 半角カナがあってもとくに問題があるようには思いませんが。 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)
「どうも変換がうまくいきません」ではうまくいかないことしかわかりません. 質問しているということだけで「うまくいっていない」ことは明らかなので, これでは全く意味をなしません. どう「うまくいかない」のか, もっと詳しく説明してください. たとえば「こういう入力を与えたときにこんな結果を期待したんだけど, 実際にはこのような結果になった」という例があれば, 判断のしようもあるかもしれません. 現状でいえるのは Unicode から shift_jis (でも EUC-JP でも ISO-2022-JP でも同じなんだけど) への変換は結局「表を見る」しかないわけで, その表がちゃんとできていれば「半角カナ」だってちゃんと変換できるはず くらい. ちなみにもともと shift_jis は「半角カナ」と共存することを目的とした符号体系なので, shift_jis (の 1バイト目) は「半角カナ」を避けて配置されています>#1.
- gyrocompas
- ベストアンサー率23% (24/104)
ICONVなど、いかがでしょうか。 サンプルは、EUC->UTF8ですが UTF8->SJISも可能なはずです。 ただし、自分でDLL等をインストールする必要があります。
お礼
有難うございました。 参考になりました。
- ohtawa
- ベストアンサー率23% (9/38)
変換する以前につぎのことを 認識する必要があります (1)SHIFT-JISからUTF-8へ変換は100%OK (2)UTF-8からSHIFT-JISへ変換は対応しない部分がある つまり(1)の逆はかならずしも真ではない (3)半角カナ文字と SHIFT-JISの1バイトでない文字とは かちあう つまり SHIFT-JISでは半角カナ文字はない(と記憶しているが)
お礼
早期にご回答頂き有難うございました。
お礼
いつも有難うございます。 おかげさまで、解決致しました。 また宜しくお願い致します。