閉じる

C#で全角・半角変換!StrConv関数の使い方とVB機能の導入手順

C#で日本語を扱うアプリケーションを開発していると、ユーザーが入力した全角英数字を半角に統一したり、カナ入力を半角から全角へ変換したりといった「文字種の変換」が必要になる場面が多々あります。

しかし、残念ながらC#の標準ライブラリ(.NET本体)には、これらを一括で変換する便利な関数が直接用意されているわけではありません。

そこで活用されるのが、かつてのVisual Basic(VB)で標準的に使われていた「StrConv」関数です。

.NET環境では、C#からでもVB専用のライブラリを参照することで、この強力な変換機能を利用することが可能です。

本記事では、C#プロジェクトでStrConv関数を使用するための導入手順から、具体的なコード例、そして注意点までを詳しく解説します。

C#でStrConvを利用するための準備

C#は.NETという共通の基盤の上で動作しているため、VB向けに提供されているライブラリをそのまま呼び出すことができます。

StrConv関数はMicrosoft.VisualBasic名前空間に含まれているため、まずはこれを利用できるように設定する必要があります。

参照の追加手順

最新の.NET( .NET 6 / 7 / 8 / 9以降 )では、多くの場合標準で含まれていますが、プロジェクトの種類によっては明示的に名前空間を指定する必要があります。

STEP1
名前空間の追加

プロジェクトのソースコードの冒頭に using Microsoft.VisualBasic; を記述します。

STEP2
参照の追加(コンパイルエラー時)

コンパイルエラーが出る場合は、ソリューションエクスプローラーの「依存関係」を右クリックし、「参照の追加」から Microsoft.VisualBasic.dll を追加します。

STEP3
.NET Core / .NET 5 以降の注意点

.NET Core や .NET 5 以降の SDK プロジェクトでは、通常は標準の共有フレームワークに含まれているため、参照設定を変更せずに using 指定だけで動作することがほとんどです。

StrConv関数の基本的な使い方

StrConv関数は、第一引数に「変換したい文字列」、第二引数に「変換の種類(VbStrConv型)」を指定して呼び出します。

VbStrConv列挙体の種類

StrConv関数の挙動を決めるVbStrConv列挙体には、主に以下のような値が用意されています。

これらを組み合わせることで、多様な変換が可能になります。

設定値内容主な用途
VbStrConv.Wide半角文字を全角文字に変換英数字・カナの全角化
VbStrConv.Narrow全角文字を半角文字に変換英数字・カナの半角化
VbStrConv.Katakanaひらがなをカタカナに変換振り仮名の統一
VbStrConv.Hiraganaカタカナをひらがなに変換読みの統一
VbStrConv.ProperCase各単語の先頭を大文字に変換英単語の整形

全角・半角変換の実装サンプル

それでは、実際にC#でStrConv関数を使用したサンプルコードを見ていきましょう。

全角を半角に変換する (Narrow)

ユーザーが入力した全角の英数字やカタカナを、データベース保存用に半角へ統一する例です。

C#
using System;
// VBの機能を使用するために名前空間を指定
using Microsoft.VisualBasic;

namespace StrConvSample
{
    class Program
    {
        static void Main(string[] args)
        {
            string fullWidthText = "ABC123アイウエオ";

            // VbStrConv.Narrow を使用して全角を半角に変換
            // Strings.StrConv メソッドを呼び出す
            string halfWidthText = Strings.StrConv(fullWidthText, VbStrConv.Narrow, 0);

            Console.WriteLine("変換前: " + fullWidthText);
            Console.WriteLine("変換後: " + halfWidthText);
        }
    }
}
実行結果
変換前: ABC123アイウエオ
変換後: ABC123アイウエオ

半角を全角に変換する (Wide)

逆に、半角で入力された文字を読みやすくするために全角へ変換する例です。

C#
using System;
using Microsoft.VisualBasic;

namespace StrConvSample
{
    class Program
    {
        static void Main(string[] args)
        {
            string halfWidthText = "アイウエオ123";

            // VbStrConv.Wide を使用して半角を全角に変換
            string fullWidthText = Strings.StrConv(halfWidthText, VbStrConv.Wide, 0);

            Console.WriteLine("変換前: " + halfWidthText);
            Console.WriteLine("変換後: " + fullWidthText);
        }
    }
}
実行結果
変換前: アイウエオ123
変換後: アイウエオ123

ひらがな・カタカナ変換の実装サンプル

StrConv関数は、全角・半角の切り替えだけでなく、文字種そのものの変換(ひらがな⇔カタカナ)も得意としています。

ひらがなをカタカナに変換する

C#
using System;
using Microsoft.VisualBasic;

namespace StrConvSample
{
    class Program
    {
        static void Main(string[] args)
        {
            string hiragana = "あいうえお";

            // VbStrConv.Katakana を指定
            string katakana = Strings.StrConv(hiragana, VbStrConv.Katakana, 0);

            Console.WriteLine("ひらがな: " + hiragana);
            Console.WriteLine("カタカナ: " + katakana);
        }
    }
}
実行結果
ひらがな: あいうえお
カタカナ: アイウエオ

複合的な変換を行う

「ひらがなを半角カタカナにする」といった、複数の条件を組み合わせることも可能です。

その場合は、列挙体を論理和(|)で結合します。

C#
using System;
using Microsoft.VisualBasic;

namespace StrConvSample
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "ひらがなを半角カナに";

            // Katakana(カタカナ化) と Narrow(半角化) を組み合わせて実行
            string result = Strings.StrConv(input, VbStrConv.Katakana | VbStrConv.Narrow, 0);

            Console.WriteLine("入力: " + input);
            Console.WriteLine("結果: " + result);
        }
    }
}
実行結果
入力: ひらがなを半角カナに
結果: ヒラガナヲハンカクカナニ

注意点とロケールの問題

StrConv関数を使用する際には、いくつか知っておくべき重要なポイントがあります。

ロケール(LCID)の指定

StrConv関数の第三引数は「LocaleID(LCID)」です。

ここを0に設定すると、システムの現在のカルチャが使用されます。

通常、日本のWindows環境で動作させている分には問題ありませんが、サーバー環境や海外OSで動作させる場合は、意図しない変換結果になる可能性があります。

確実に日本語として変換したい場合は、日本のLCIDである1041を明示的に指定するか、実行環境の文化設定に依存しない方法を検討する必要があります。

OSの依存性

StrConvは内部的にWindows API(LCMapString)を呼び出しているケースがあります。

そのため、LinuxやmacOS上の.NETで動作させる場合、Microsoft.VisualBasicライブラリが期待通りに動作しない、あるいは例外が発生する可能性があります。

マルチプラットフォーム展開を考えている場合は、OSに依存しない変換ロジックを自作するか、専用のライブラリ(ICUなど)を検討してください。

代替案:StrConvを使わない方法

OS依存を避けたい、あるいはより細かい制御を行いたい場合、以下のような方法も検討されます。

Unicode正規化 (NormalizationForm)

string.Normalize(NormalizationForm.FormKC)を使用すると、全角英数字を半角に、濁点付きの文字を結合済み文字に変換できます。

ただし、カタカナを半角にするなどの日本独自の細かい制御は不向きです。

手動マッピング

変換前と変換後の文字をディクショナリや配列で持ち、ReplaceStringBuilderで1文字ずつ変換します。

パフォーマンスは非常に高く、OSに依存しません。

まとめ

C#で全角・半角変換を行う際、Microsoft.VisualBasic名前空間のStrConv関数を利用するのが最も手軽で効率的です。

わずか1行のコードで「全角⇔半角」「ひらがな⇔カタカナ」といった複雑な日本語処理を完結させることができます。

導入の際は、以下の3点を意識しておきましょう。

  • using Microsoft.VisualBasic; を追加すること
  • VbStrConv 列挙体で変換内容を正しく指定すること
  • Windows以外のプラットフォームでの動作には注意が必要であること

古くから親しまれているVBの機能ですが、現代のC#開発においてもその利便性は健在です。

業務システムやツール開発における入力データのクレンジングに、ぜひ活用してみてください。

基本操作

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!