DOBON.NET DOBON.NETプログラミング掲示板過去ログ

全角半角混在文字列をすべて全角文字列にする場合について

環境/言語:[C#]
分類:[.NET]

文字列「ABC」をすべて全角の文字列「ABC」とする処理を作成したいのですが
処理の流れを

1 1バイトずつ切り出してbute[]型の変数に代入
2 配列内要素をひとつひとつ比較
3 合致すれば全角の文字をセット
4 合致しなければ元の文字をセット

このように考えコードを書いているのですが、なかなかウマくいきません。

string result = ""; // 置き換え後の文字列
string buff = "ABC"; // 全角半角混在文字列

byte [] bytesData = GetEncoding("Shift_JIS").GetBytes(buff);
int byteLength = buffのバイト長;
char [] charsData;

for(int i=0; i<byteLength; i++)
{
switch(bytesData[i])
{
case 65: result = result + "A"; break;
case 66: result = result + "B"; break;
case 67: result = result + "C"; break;
default :
↓↓↓↓↓上記4の処理を想定
charsData = GetEncoding("Shift_JIS").GetChars(bytesData,i,2);
result = result + charsData.ToString();
if(i+1<byteLength)
i++;
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
break;
}
}

識者の方、ご教示ください。
こちらが参考になったりならなかったりするかもしれません。
http://support.microsoft.com/kb/312890/JA/

■No6825に返信(JEEPさんの記事)
> 文字列「ABC」をすべて全角の文字列「ABC」とする処理を作成したいのですが
> 処理の流れを
>
> 1 1バイトずつ切り出してbute[]型の変数に代入
> 2 配列内要素をひとつひとつ比較
> 3 合致すれば全角の文字をセット
> 4 合致しなければ元の文字をセット
>
> このように考えコードを書いているのですが、なかなかウマくいきません。
>
> string result = ""; // 置き換え後の文字列
> string buff = "ABC"; // 全角半角混在文字列
>
> byte [] bytesData = GetEncoding("Shift_JIS").GetBytes(buff);
> int byteLength = buffのバイト長;
> char [] charsData;
>
> for(int i=0; i<byteLength; i++)
> {
> switch(bytesData[i])
> {
> case 65: result = result + "A"; break;
> case 66: result = result + "B"; break;
> case 67: result = result + "C"; break;
> default :
> ↓↓↓↓↓上記4の処理を想定
> charsData = GetEncoding("Shift_JIS").GetChars(bytesData,i,2);
> result = result + charsData.ToString();
> if(i+1<byteLength)
> i++;
> ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
> break;
> }
> }
>
> 識者の方、ご教示ください。
>
|∀・)さん、レスありがとうございました。

主旨は大文字⇔小文字ではなく、全角⇔半角変換でした(^^;

ですが、お示し頂いた頁は今後の勉強のために活かさせて頂きます。
2004/10/20(Wed) 10:11:02 編集(投稿者)

■No6837に返信(JEEPさんの記事)
> 主旨は大文字⇔小文字ではなく、全角⇔半角変換でした(^^;
やはりそうでしたか...

では、こっちを見るとわかりやすいですよ。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=6545&forum=7


■追記

 言語鈍りのないコーディングに拘っていないのならば、

 Microsoft VisualBasic .NET Runtimeを参照追加
 using Microsoft.Visualbasic を追加
 Strings.StrConv([string], VbStrConv.Wide, 0x0411); でゲットできますね。
java.lang.Nullpo さん、レスありがとうございます。

全角⇔半角変換の前提として
・VBランタイムも使用しない
・WIN32APIも使用しない
という決まりごとがあったりするのです・・・。

すいません、先に書くべきでした。

そんなワケでURLで示されている方法がC#でもできないかと自分で書いたコード
のような方法を取っていたりします。
■No6839に返信(JEEPさんの記事)
> java.lang.Nullpo さん、レスありがとうございます。
>
> 全角⇔半角変換の前提として
> ・VBランタイムも使用しない
> ・WIN32APIも使用しない
> という決まりごとがあったりするのです・・・。
>
> すいません、先に書くべきでした。
>
> そんなワケでURLで示されている方法がC#でもできないかと自分で書いたコード
> のような方法を取っていたりします。

では、文字コードをお勉強してみましょう。

> case 65: result = result + "A"; break;
> case 66: result = result + "B"; break;
> case 67: result = result + "C"; break;

これでは骨が折れすぎます。
java.lang.Nullpoさん、レスありがとうございます。

仰せのとおり、骨が折れるコードなのですが、ここではこういう仕様なのです。
JEEPさん、こんにちは。
> 全角⇔半角変換の前提として
> ・VBランタイムも使用しない
> ・WIN32APIも使用しない
> という決まりごとがあったりするのです・・・。
C/C++関連サイトにはサンプルが転がってたりするから、探してみるといいよ。
べがらぼさん、ありがとうございます。
仰せのとおり、C/C++系で探してみようと思います。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板