全角から半角へ変換。全角を半角へ変換、他
C#でVBのStrConv関数みたいなのがない様子。
調べたらVBでも最終的にAPIを使って変換しているらしい。
それならC#からAPIを呼び出してもいいやってことで、とりあえず動くものが完成。
覚え書きとして記録。
using System; using System.Text; using System.Runtime.InteropServices; namespace Panda728.Utility { ////// 指定に従って変換された文字列型 (String) の値を返します。 /// public class StrConv { ////// LCMapStringA ある文字列を別の文字列にマップする。 /// [DllImport("kernel32.dll", SetLastError=true)] private static extern int LCMapStringA ( int Locale, int dwMapFlags, string lpSrcStr, int cchSrc, StringBuilder lpDestStr, int cchDest); ////// GetSystemDefaultLCID ロケール識別子を取得 /// [DllImport("kernel32.dll")] private static extern int GetSystemDefaultLCID(); ////// マッピング定数 /// private const int LCMAP_LOWERCASE = 0x100; private const int LCMAP_UPPERCASE = 0x200; private const int LCMAP_HIRAGANA = 0x100000; private const int LCMAP_KATAKANA = 0x200000; private const int LCMAP_HALFWIDTH = 0x400000; private const int LCMAP_FULLWIDTH = 0x800000; ////// バイト数をカウントするために使用するShift_JISエンコード /// private static Encoding enc = System.Text.Encoding.GetEncoding("Shift_JIS"); ////// 文字列内の全角文字 (2 バイト) を半角文字 (1 バイト) に変換します。 /// /// 変換元の文字列 ///変換結果 ////// メソッドの使用例 /// public static string ToNarrow( string str ) { StringBuilder sb = new StringBuilder( enc.GetByteCount(str) ); LCMapStringA( GetSystemDefaultLCID(), LCMAP_HALFWIDTH, str, -1, sb, sb.MaxCapacity ); return sb.ToString().Replace("\0",""); } ////// string s = StrConv.ToNarrow( "123ABCあいうアイウ" ); /// ////// Console.WriteLine( s ); //"123aBc123AbCあいうアイウ" /// ////// 文字列内の半角文字 (1 バイト) を全角文字 (2 バイト) に変換します。 /// /// 変換元の文字列 ///変換結果 ////// メソッドの使用例 /// public static string ToWide( string str ) { StringBuilder sb = new StringBuilder( enc.GetByteCount(str) * 2 ); LCMapStringA( GetSystemDefaultLCID(), LCMAP_FULLWIDTH, str, -1, sb, sb.MaxCapacity ); return sb.ToString().Replace("\0",""); } ////// string s = StrConv.ToNarrow( "123ABCあいうアイウ" ); /// ////// Console.WriteLine( s ); //"123aBc123AbCあいうアイウ" /// ////// 文字列を大文字に変換します。 /// /// 変換元の文字列 ///変換結果 ////// メソッドの使用例 /// public static string ToUpperCase( string str ) { StringBuilder sb = new StringBuilder( enc.GetByteCount(str) ); LCMapStringA( GetSystemDefaultLCID(), LCMAP_UPPERCASE, str, -1, sb, sb.MaxCapacity ); return sb.ToString().Replace("\0",""); } ////// string s = StrConv.ToUpperCase( "123aBc123AbCあいうアイウ" ); /// ////// Console.WriteLine( s ); //"123ABC123ABCあいうアイウ" /// ////// 文字列を小文字に変換します。 /// /// 変換元の文字列 ///変換結果 ////// メソッドの使用例 /// public static string ToLowerCase( string str ) { StringBuilder sb = new StringBuilder( enc.GetByteCount(str) ); LCMapStringA( GetSystemDefaultLCID(), LCMAP_LOWERCASE, str, -1, sb, sb.MaxCapacity ); return sb.ToString().Replace("\0",""); } ////// string s = StrConv.ToLowerCase( "123aBc123AbCあいうアイウ" ); /// ////// Console.WriteLine( s ); //"123abc123abcあいうアイウ" /// ////// 文字列内のひらがなをカタカナに変換します。 /// /// 変換元の文字列 ///変換結果 ////// メソッドの使用例 /// public static string ToKatakana( string str ) { StringBuilder sb = new StringBuilder( str.Length * 2); LCMapStringA( GetSystemDefaultLCID(), LCMAP_KATAKANA, str, -1, sb, sb.MaxCapacity ); return sb.ToString().Replace("\0",""); } ////// string s = StrConv.ToLowerCase( "123aBc123AbCあいうアイウ" ); /// ////// Console.WriteLine( s ); //"123aBc123AbCアイウアイウ" /// ////// 文字列内のカタカナをひらがなに変換します。 /// /// 変換元の文字列 ///変換結果 ////// メソッドの使用例 /// public static string ToHiragana( string str ) { StringBuilder sb = new StringBuilder( enc.GetByteCount(str) ); LCMapStringA( GetSystemDefaultLCID(), LCMAP_HIRAGANA, str, -1, sb, sb.MaxCapacity ); return sb.ToString().Replace("\0",""); } } }/// string s = StrConv.ToLowerCase( "123aBc123AbCあいうアイウ" ); /// ////// Console.WriteLine( s ); //"123aBc123AbCあいうアイウ" /// ///