EsUtil.Helper.ZenHanConverter 2.0.0

dotnet add package EsUtil.Helper.ZenHanConverter --version 2.0.0
                    
NuGet\Install-Package EsUtil.Helper.ZenHanConverter -Version 2.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="EsUtil.Helper.ZenHanConverter" Version="2.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="EsUtil.Helper.ZenHanConverter" Version="2.0.0" />
                    
Directory.Packages.props
<PackageReference Include="EsUtil.Helper.ZenHanConverter" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add EsUtil.Helper.ZenHanConverter --version 2.0.0
                    
#r "nuget: EsUtil.Helper.ZenHanConverter, 2.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package EsUtil.Helper.ZenHanConverter@2.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=EsUtil.Helper.ZenHanConverter&version=2.0.0
                    
Install as a Cake Addin
#tool nuget:?package=EsUtil.Helper.ZenHanConverter&version=2.0.0
                    
Install as a Cake Tool

release nuget GitHub Packages build .NET platform

ZenHanConverter ユーザー利用仕様書

概要

  • 全角・半角・カタカナ/ひらがな・記号などの相互変換を提供するユーティリティです。
  • 変換定義は CSV からコード生成され、ConvertPairs/EntryRecord オブジェクトとして高速に扱えます。
  • 入力を正規化してから変換する複合メソッド (ToHan, ToZenWithKatakana など) を備え、アプリケーションの文字幅統一やデータクレンジングに利用できます。

インストール

NuGet.org から

dotnet add package EsUtil.Helper.ZenHanConverter

GitHub Packages から

GitHub Packages は認証が必要なため、事前にソースと資格情報を登録します。

# USERNAME は GitHub のユーザー名、TOKEN は read:packages 権限を持つ PAT を指定します
dotnet nuget add source --username USERNAME --password TOKEN --store-password-in-clear-text --name github "https://nuget.pkg.github.com/tomokuni/index.json"

dotnet add package EsUtil.Helper.ZenHanConverter

対応環境

  • .NET 10 以上(ライブラリ本体。C# 14 で実装)
  • OS に依存しないため、Windows / Linux / macOS のいずれでも動作します。
  • テストはライブラリと同じ net10.0 を対象に実行しています。

リリースビルド での ベンチマーク結果

1000 文字の混合テキスト(英数字・全角/半角カナ・ひらがな・記号)を 10,000 回ループ処理した際の実行時間計測結果です(.NET 10 / Release / x64)。

メソッド 実行時間 (10,000回合計) 1回あたりの平均 スループット (約)
ToNormalize 74 ms 7.4 µs 130 MB/s
ToHan 708 ms 70.8 µs 13.5 MB/s
ToZenWithKatakana 432 ms 43.2 µs 22.1 MB/s

※ ToHan は変換対象のパターンが最も多く (GroupOf.Ascii + GroupOf.Kana の全域)、正規表現のマッチング負荷が高いため相対的に時間を要します。 ※ ToNormalize は正規化のみのため最も高速です。

変換できる文字とカテゴリ

  • 数字: 0~9 ↔ 0~9
  • 英字: 全角/半角の大文字・小文字 A~Z、a~z ↔ A~Z、a~z
  • 記号: 括弧類、クォート類、区切り記号、算術/比較記号、\/\\/¥/¥/スペース など
  • カタカナ/ひらがな: 清音・濁音・半濁音・小書き文字を全角/半角で相互変換。゛/゜ 長音 ー、中点 ・、句読点 、 。 も対応
  • ケース変換: 全角・半角それぞれの大文字⇔小文字
  • カナの結合: 分離した全角カナ (カ+゛ 等) を合成 (GroupOf.Kana.Kata.ComposeMap / GroupOf.Kana.Hira.ComposeMap)。半角化 (ToHan 系) で分離した半角カナが得られます
  • 特殊ケース: 細かな空白(ノーブレークスペース等)を通常スペースへ、各種ダッシュをハイフンへ正規化

主な API 詳説

メソッド 内容
string ToNormalize(string text) 特殊空白・各種ダッシュを正規化し、分離した全角カナを合成
string ToHan(string text) 数字/英字/記号/カナ(長音/濁点含む)を半角へ統一
string ToZenWithKatakana(string text) 数字/英字/記号/半角カナを全角へ統一(ひらがなはそのまま)
string ToZenWithHiragana(string text) 数字/英字/記号/半角カナを全角ひらがなへ統一(全角カタカナはそのまま)
string ToHanOnlyAscii(string text) 数字・英字・記号のみ半角化し、カナは変更しない
string ToZenOnlyAscii(string text) 数字・英字・記号のみ全角化(半角スペースは全角スペース U+3000 へ)
string ToHanOnlyKana(string text) ひらがな/カタカナとかな記号を半角化
string ToHanOnlyKatakana(string text) カタカナとかな記号のみ半角化(ひらがなはそのまま)
string ToZenOnlyKatakana(string text) 半角カナとかな記号を全角カタカナへ(その他は変更しない)
string ToZenKatakanaOnlyKana(string text) ひらがな+半角カナを全角カタカナへ
string ToZenHiraganaOnlyKana(string text) カタカナ(全角/半角)をひらがなへ
string ToUpperCase(string text) 全角/半角英字を大文字へ
string ToLowerCase(string text) 全角/半角英字を小文字へ
string ConvertTabToSpace(string text) タブを半角スペースへ
string ConvertBackslashToHanYen(string text) バックスラッシュを半角円記号へ

ToHan・ToZen 系と ToUpper/ToLowerCase は内部で ToNormalize を適用します。 ToNormalize のカナ合成は 全角カナ同士 / 全角+半角濁点 が対象で、半角カナ同士 (カ+゙) は変化しません。

拡張メンバー(文字列に直接チェーンできる API)

上記の表のメソッドは、C# 14 の拡張メンバーとして 文字列のインスタンス メソッドと同じ形でも呼び出せます。 using EsUtil.Helper.ZenHanConverter; を記述するだけで利用できます。

拡張メンバー 内容
string ToNormalize() 特殊空白・各種ダッシュを正規化し、分離した全角カナを合成
string ToHan() 数字/英字/記号/カナを半角へ統一
string ToZenWithKatakana() 半角カナを全角カタカナへ統一
string ToZenWithHiragana() 半角カナを全角ひらがなへ統一
string ToHanOnlyAscii() / ToZenOnlyAscii() 数字・英字・記号のみ半角化 / 全角化
string ToHanOnlyKana() / ToHanOnlyKatakana() かな / カタカナのみ半角化
string ToZenOnlyKatakana() / ToZenKatakanaOnlyKana() 半角カナを全角カタカナへ / かなを全角カタカナへ
string ToZenHiraganaOnlyKana() カタカナ(全/半)をひらがなへ
string ToUpperCase() / ToLowerCase() 全角/半角英字を大文字 / 小文字へ
string ConvertTabToSpace() / ConvertBackslashToHanYen() タブ / バックスラッシュの置換
bool IsEmpty 変換ペアを 1 件も含まないか(ConvertPairs やペアの列挙で利用)
ConvertPairs ToConvertPairs() ペア集合から ConvertPairs を生成
using EsUtil.Helper.ZenHanConverter;

// 静的 API の代わりに、文字列から直接チェーンできる
var han = "ABC123 カナ。".ToHan();                          // "ABC123 カナ。"
var zen = "ABC123 カタカナ かな".ToZenWithKatakana();               // "ABC123 カタカナ かな"
var normalized = "カ゛\u00A0\u2010".ToNormalize();              // "ガ -"

// ペア集合への拡張
var isEmpty = GroupOf.Ascii.ToHanMap.IsEmpty;                    // false
var pairs = new[] { ("◎", "○"), ("○", "◯") }.ToConvertPairs();

使い方サンプル

using EsUtil.Helper.ZenHanConverter;

// 正規化(特殊空白→U+0020、各種ダッシュ→U+002D、分離した全角カナの合成)
var normalized = ZenHanConverter.ToNormalize("カ゛\u00A0\u2010"); // "ガ -"

// 半角カナは ToNormalize の合成対象外(変化しない)
var notNormalized = ZenHanConverter.ToNormalize("ガ"); // "ガ"

// 全カテゴリを半角へ
var han = ZenHanConverter.ToHan("ABC123 カナ。"); // "ABC123 カナ。"

// 全角で統一(半角カナは全角カタカナ、ひらがなはそのまま)
var zenKata = ZenHanConverter.ToZenWithKatakana("ABC123 カタカナ かな"); // "ABC123 カタカナ かな"

// 半角カナを全角ひらがなへ(全角カタカナはそのまま)
var zenHira = ZenHanConverter.ToZenWithHiragana("ABC123 カタカナ カナ"); // "ABC123 かたかな カナ"

// 数字・英字・記号のみ半角化
var hanAscii = ZenHanConverter.ToHanOnlyAscii("ABC123 カナ"); // "ABC123 カナ"

// 数字・英字・記号のみ全角化(半角スペースも全角スペースへ)
var zenAscii = ZenHanConverter.ToZenOnlyAscii("ABC123 カナ"); // "ABC123 カナ"

// ひらがな/カタカナとかな記号を半角化
var hanKana = ZenHanConverter.ToHanOnlyKana("カナかな。ー"); // "カナカナ。ー"

// カタカナとかな記号のみ半角化(ひらがなはそのまま)
var hanKata = ZenHanConverter.ToHanOnlyKatakana("カナかな。ー"); // "カナかな。ー"

// 半角カナを全角カタカナへ
var zenKataOnlyKata = ZenHanConverter.ToZenOnlyKatakana("カナかな カタカナ"); // "カナかな カタカナ"

// ひらがな+半角カナを全角カタカナへ
var zenKataOnlyKana = ZenHanConverter.ToZenKatakanaOnlyKana("かな カナ"); // "カナ カナ"

// カタカナ(全/半)をひらがなへ
var zenHiraOnlyKana = ZenHanConverter.ToZenHiraganaOnlyKana("カナ カナ"); // "かな かな"

// 英字を大文字へ(全角/半角対応)
var upper = ZenHanConverter.ToUpperCase("abc abc"); // "ABC ABC"

// 英字を小文字へ(全角/半角対応)
var lower = ZenHanConverter.ToLowerCase("ABC ABC"); // "abc abc"

// タブを半角スペースへ
var tabs = ZenHanConverter.ConvertTabToSpace("\tABC\t"); // " ABC "

// バックスラッシュを半角円記号へ
var yen = ZenHanConverter.ConvertBackslashToHanYen(@"\"); // "¥"

// ConvertPairs で任意の組合せを構築
var pairs = new ConvertPairs([( "◎", "○" ), ( "○", "◯" )]);
var chained = pairs.ChainMerge(new ConvertPairs([( "◯", "●" )]));
var result = chained.Convert("◎○◯"); // "○●◯"

変換定義の直接利用

  • 主な API では対応しない細かな変換を行う場合、GroupOf / NameOf クラス経由で定義済みの変換ペア (ConvertPairs) を取得できます。
  • GroupOf はグループ単位、NameOf は定義単位でアクセスできます(詳細は「定義済みエントリ一覧」を参照)。

定義グループ (GroupOf)

GroupOf 静的クラス以下にカテゴリごとに分類されたプロパティが定義されています。

グループ (プロパティ) 内容
GroupOf.Ascii 英数字・記号関連の変換定義の集合
GroupOf.Kana かな(ひらがな・カタカナ)関連の変換定義の集合

これらを通して、さらに細かい単位のマップ (IEnumerable<(string Source, string Target)>) にアクセス可能です。 例: GroupOf.Ascii.ToHanMap, GroupOf.Kana.ToZenMap, GroupOf.Kana.Kata.ComposeMap など。

ConvertPairs の使い方と変換方法

メソッド 内容
string Convert(string text) 置換
ConvertPairs Chain(ConvertPairs second, bool includeUnmatchedFirst, bool includeUnmatchedSecond) 変換先一致で連結し、未マッチの保持可否を個別に制御
ConvertPairs Chain(ConvertPairs second) マッチ部分のみ連鎖
ConvertPairs ChainMerge(ConvertPairs second) 未マッチも含めて結合

定義済みエントリ一覧 (GroupOf / NameOf)

GroupOf クラスおよび NameOf クラスでアクセス可能な定義一覧です。 GroupOf.{カテゴリ}.{グループ} で ConvertPairs を、NameOf.{カテゴリ}.{定義名} で個別の定義を取得できます。 いずれも EsUtil.Helper.ZenHanConverter 名前空間に属します。

GroupOf の階層

各ノードには変換方向ごとの ConvertPairs プロパティ (ToHanMap / ToZenMap / ToUpperMap / ToLowerMap / ComposeMap / ToAsciiMap / FromAsciiMap / ToHiraMap / ToKataMap / ToASpaceMap / ToAHyphenMap / ToSpaceFromTabMap / ToYenFromBslashMap / ToBslashFromYenMap) が定義されています。

パス 内容
GroupOf.Ascii 英数字・記号の全定義
GroupOf.Ascii.Numeric.Number 数字 0~9 ↔ 0~9
GroupOf.Ascii.Alphabet 英字の全定義
GroupOf.Ascii.Alphabet.Han / .Zen 半角英字 / 全角英字の大文字⇔小文字
GroupOf.Ascii.Alphabet.Large / .Small 英大文字 / 英小文字の全角⇔半角
GroupOf.Ascii.Symbol 記号の全定義
GroupOf.Ascii.Symbol.Bracket / .Fin / .Ope / .Punc 括弧 / 末尾記号 / 演算子 / 句読点
GroupOf.Ascii.Replace 置換・正規化 (ToASpaceMap / ToAHyphenMap / ToSpaceFromTabMap ほか)
GroupOf.Ascii.Replace.Fringe 特殊空白・各種ダッシュの正規化
GroupOf.Ascii.Replace.Han / .Zen 半角円記号 / 全角円記号とバックスラッシュの相互変換
GroupOf.Kana かなの全定義 (ToHanMap / ToZenMap / ToHiraMap / ToKataMap / ComposeMap / ToAsciiMap)
GroupOf.Kana.Kata カタカナ
GroupOf.Kana.Kata.Large / .Small カタカナ 清音/濁音/半濁音 / 小書き文字
GroupOf.Kana.Kata.ZZ / .ZH / .HZ 分離カタカナの合成(全-全 / 全-半 / 半-全)
GroupOf.Kana.Hira ひらがな
GroupOf.Kana.Hira.Large / .Small ひらがな 清音/濁音/半濁音 / 小書き文字
GroupOf.Kana.Hira.ZZ / .ZH 分離ひらがなの合成(全-全 / 全-半)
GroupOf.Kana.Symbol かな記号
GroupOf.Kana.Symbol.Voice / .Han / .Zen / .Punc 濁点・半濁点 / 半角かな記号 / 全角かな記号 / 句読点
GroupOf.Kana.Case カタカナ⇔ひらがな (ToHiraMap / ToKataMap)
GroupOf.Kana.Case.Large / .Small かな 清音等 / 小書き文字

NameOf の階層

パス 内容
NameOf.Ascii.n0~n9 数字 0~9
NameOf.Ascii.A~Z 英字。.Large(英大文字の全⇔半)、.Small(英小文字の全⇔半)、.Han(半角の大⇔小)、.Zen(全角の大⇔小)
NameOf.Ascii.ParenthesisLeft ほか 記号(後述の記号名一覧を参照)
NameOf.Ascii.Space.Symbol / .Replace スペース
NameOf.Ascii.Bslash.Symbol / .Replace.Han / .Replace.Zen バックスラッシュ
NameOf.Ascii.Yen.Symbol / .Replace.Han / .Replace.Zen 円記号
NameOf.Ascii.Hyphen / .Tab 各種ダッシュ / タブ
NameOf.Kana.{A, I, U, E, O, KA, KI, ..., N, GA, ..., VU} かな。.Kata(カタカナ)、.Hira(ひらがな)、.Case(カタカナ⇔ひらがな)
NameOf.Kana.Voice / .SemiVoice 濁点 ゛ / 半濁点 ゜
NameOf.Kana.MiddleDot 中点 ・
NameOf.Kana.Prolong.Voice / .Han / .Zen 長音 ー / ー
NameOf.Kana.LeftCornerBracket / .RightCornerBracket かぎ括弧 「 / 」
NameOf.Kana.Period.Punc / .Han / .Zen 句点 。 / 。
NameOf.Kana.Comma.Punc / .Han / .Zen 読点 、 / 、
NameOf.Ascii の記号名一覧
定義名 内容
ParenthesisLeft / ParenthesisRight 丸括弧 左 / 右
SquareBracketLeft / SquareBracketRight 角括弧 左 / 右
CurlyBracketLeft / CurlyBracketRight 波括弧 左 / 右
DoubleQuote / SingleQuote / Backquote ダブルクォート / シングルクォート / バッククォート
Comma / Period / Colon / Semicolon カンマ / ピリオド / コロン / セミコロン
LessThan / GreaterThan / Equal 不等号 小 / 不等号 大 / 等号
Plus / HyphenMinus / Tilde / Slash プラス / ハイフン / チルダ / スラッシュ
Question / Exclamation はてな / 感嘆符
Sharp / Dollar / Percent シャープ / ドル / パーセント
Ampersand / Asterisk / At アンパサンド / アスタリスク / アットマーク
Caret / UnderBar / VerticalBar キャレット / アンダーバー / 縦棒

パフォーマンス向上施策

  • Regex/辞書キャッシュ: ConcurrentDictionary でコンパイル済み Regex とマッピングをキャッシュし、再生成を回避。
  • 先勝ち辞書化: 同一 Source は初出のみ採用し、決定性と無駄な上書きを防止。
  • Unicode デコード先行: EntryRecord 生成時に U+XXXX を実体化し、実行時オーバーヘッドを削減。
  • null/空の早期スキップ: 変換不要ケースで早期 return し、Regex.Replace 呼び出しを抑制。
  • 不変コレクション共有: ImmutableList を使い副作用を排除、スレッドセーフに高速アクセス。
  • 連鎖変換の辞書化: ConvertPairs.Chain では第2段を Source ごとにグルーピングし、連結判定を O(1) に高速化。

ライセンス

本リポジトリの LICENSE を参照してください。

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.0 101 9/16/2026
1.0.0 103 9/15/2026