- 締切済み
半角カナの処理
お世話になります。 VisualStudio 2005 C# で開発しています。 Shift-JISのstringデータ「data」の処理について、 foreach( char c in data ) { // c について処理 } この処理で、dataに半角カナが含まれていた場合でも、 2byteのcharとして取得してしまい、おかしくなります。 半角カナを判定する方法として、どのような処理があるのでしょうか? よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- PED02744
- ベストアンサー率40% (157/390)
回答No.1
.NETでは、StringはUNICODEだと思うのですが、どうやってShift_Jisのデータを格納されましたでしょうか? なお、UNICODEの世界では2バイト(Vistaで新たに追加された文字なら4バイト)ですね。
お礼
Unicodeとして取り出した1文字を、Shift_JISにエンコードしたら、 1バイト文字と、2バイト文字をうまく扱えました! Encoding enc = Encoding.GetEncoding("Shift_JIS"); foreach (char c in data) { int code = 0; byte[] sjis_code = enc.GetBytes(c.ToString()); if (sjis_code.Length == 2) {// 2バイト文字 code |= (int)(sjis_code[0] << 8); code |= (int)sjis_code[1]; } else {// 1バイト文字 code = (int)sjis_code[0]; } }
補足
Encoding enc = Encoding.GetEncoding("Shift_JIS"); byte[] bytes = enc.GetBytes(src_data); string data = enc.GetString(bytes); としましたが、UNICODEの扱いになってしまうのでしょうか? Shift_JISで扱いたい場合、bytesを見るしか無いのでしょうか? その場合、1byte,2byte混在の、1文字を扱う方法はあるのでしょうか?