- PR -

C#による半角⇔全角変換の方法は?

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-30 12:01
半角文字→全角文字 (変換方法)
半角文字を全角文字に変換する関数
ASP.NET/C#でStrConvを
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-31 10:05
 KERNEL32.DLLにある、LCMapStringW関数をラップして、全角/半角、大文字/小文字、ひらがな/カタカナ変換を行うクラスライブラリのサンプルを作成しました。下の"www"のリンクから、私のウェブページへ行き、更新記録の「Win32APIで定義された関数をラッピングする」をクリック、サンプル1のソリューションをダウンロードしてください。


 使用に関しては、ページの先頭にある注意事項をよく読んでください。

 なお、LCMapStringの仕様で、いくつかの文字については変換できません。
CHN
ぬし
会議室デビュー日: 2002/03/07
投稿数: 382
投稿日時: 2004-03-31 10:13
引用:

Jittaさんの書き込み (2004-03-31 10:05) より:
 KERNEL32.DLLにある、LCMapStringW関数をラップして、全角/半角、大文字/小文字、ひらがな/カタカナ変換を行うクラスライブラリのサンプルを作成しました。下の"www"のリンクから、私のウェブページへ行き、更新記録の「Win32APIで定義された関数をラッピングする」をクリック、サンプル1のソリューションをダウンロードしてください。


 使用に関しては、ページの先頭にある注意事項をよく読んでください。

 なお、LCMapStringの仕様で、いくつかの文字については変換できません。


マジっすか!
スレッド主ではなですが、ありがとうございます&ご苦労さまです。
いっただきま〜す〜
_________________
damepg
大ベテラン
会議室デビュー日: 2003/03/19
投稿数: 229
お住まい・勤務地: 東京都内
投稿日時: 2004-04-07 15:43
こんにちは。
ご教授いただきありがとうございました。
私は全角文字を配列に持って対処する事にしました。
PoohKid
常連さん
会議室デビュー日: 2004/12/07
投稿数: 26
お住まい・勤務地: はてな市民
投稿日時: 2005-12-26 23:04
引用:

CHNさんの書き込み (2004-03-30 11:50) より:
難しいこと考えずに、変換テーブルでも作れば良い
と思いますが、無理ですか?
全角、半角にできるものは限りがありますから、「作ってしまえ」が
一番かと。



スマートデバイスの開発中にこのスレッドにたどり着きました。今更ですが。

Microsoft.VisualBasic.Strings.StrConvは.Net Compact Frameworkではサポートされていないようです。
StrConv 関数
仕方がないので自作しようと考えました。

変換テーブルの作成が現実的によさそうですね。論理上でも最大256しか扱いませんし。
0-9|A-Z|a-zのみ対応でも当面実用には困らなさそうです。
この案を採用させていただきました。どうもありがとうございます。

私は変換テーブルにハッシュテーブルを使ってみました。(.Net Compact Framework対応)
アンマネージコードは極力避けたかったのと、String.Replaceより効率がよさそうかと考えました。

【変換処理】
コード:
string Convert(string str, Hashtable h)
{
    char[] c = str.ToCharArray();
    for (int i = 0; i < c.Length; i++)
    {
        if (h.Contains(c[i])) c[i] = (char) h[c[i]];
    }
    return new string(c, 0, c.Length);
}



【変換テーブル(半角→全角)】
コード:
Hashtable toWide = new Hashtable();
toWide.Add('0', '0');  // 必要数くりかえし



【変換テーブル(全角→半角)】
コード:
toNarrow = new Hashtable();
foreach (char c in toWide.Keys)
{
    toNarrow.Add(toWide[c], c);
}



変換テーブルは一つでも足りますが、Convertメソッドを汎用的に使用するなら変換のバリエーション分持っていた方が良いと思います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-27 01:07
速さでいうならば、switch 〜 case の通しなんてどうでしょうね? (^^;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-12-27 09:52
StrConvといえば昔こんなのがありましたねぇ

http://72.14.203.104/search?q=cache:0E4l2iNrxw8J:www.ag.il24.net/~nakasima/vb/trap/index.htm+strconv%E3%81%AE%E7%BD%A0&hl=ja&lr=lang_ja
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-27 10:12
引用:

明智重蔵さんの書き込み (2005-12-27 09:52) より:

StrConvといえば昔こんなのがありましたねぇ


昔も何も、今も '\\' あたりは変換不可っすよw
よくあるのが、StrConv したものに対して Replace('\\', '¥');

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)