【データ加工・変換 No.1】全角カタカナ⇔全角ひらがなの変換

【データ加工・変換 No.1】全角カタカナ⇔全角ひらがなの変換

GoAnywhere2023.06.22

全角カタカナ⇔全角ひらがなの変換

はじめに

GoAnywhereMFTは、システム間、取引先間における多種多様なデータ・ファイル連携を実現するソリューションです。

データ・ファイル連携において、それぞれ異なる形式のデータを持つ各システムに合わせたデータの加工や変換は必要不可欠となります。GoAnywhereはデータの加工・変換機能も持っており、GoAnywhereはデータの抽出・加工・変換からファイルの転送まで一元的に管理可能です。

【GoAnywhereのデータ加工・変換機能】

  • 異なる拡張子ファイルへの変換
  • ファイルの文字コードの変換
  • 日付や数字等のフォーマットの変換
  • トリム処理
  • 文字の置換処理
  • 新しいカラムの追加・削除・結合
  • 変換テーブルを利用して値の変換
しかし、実際にデータ・ファイル連携する際には、他にも様々な種類のデータ加工・変換が必要となります。

本記事では、JavaScript等の一般的な開発言語で実装可能な方法を参考に、GoAnywhereMFTでも全角カタカナ⇔全角ひらがなの変換が可能か試してみました。

一般的な開発言語の場合の実現方法

カタカナもひらがなも文字コード上で対応する並びになっているため、16進数で60足し引きすることで相互に変換することが可能です。

【Unicodeの文字コード】
・カタカナ:「ア」の文字コードは[30A2]。「ン」は[30F3]。
・ひらがな:「あ」の文字コードは[3042]。「ん」は[3093]。

・「カタカナ」の文字コードから16進数で60(「0x60」)を引く⇒「ひらがな」に変換
・「ひらがな」の文字コードに16進数で60(「0x60」)を足す ⇒「カタカナ」に変換

(例:JavaScript)カタカナ⇒ひらがな
  
Katakana = Katakana.replace(/[ァ-ン]/g, function(s) {
  return String.fromCharCode(s.charCodeAt(0) - 0x60);
});
  
(例:JavaScript)ひらがな⇒カタカナ
  
Hiragana = Hiragana.replace(/[ぁ-ん]/g, function(s) {
  return String.fromCharCode(s.charCodeAt(0) + 0x60);
});
  

VB.NET等の一部言語では、標準的に文字変換の関数やメソッドが既に用意されており、容易に全角カタカナ⇔全角ひらがなの変換が可能です。
(例)VB.NET
StrConv関数:StrConv(String, VbStrConv, Int32)
・全角カタカナ⇒全角ひらがな
 StrConv('カタカナ', VbStrConv.Hiragana)
・全角ひらがな⇒全角カタカナ
 StrConv('ひらがな', VbStrConv.Katakana)

GoAnywhereでやってみた

上記で紹介した文字コード表の対応を活用して、GoAnywhereでも全角カタカナ⇔全角ひらがなの変換をやってみます。
以下の3つの処理によって変換を実装します。

  1. 対象の文字をUnicode(UTF-8)文字コードにエンコード(関数:HexEncode)
  2. Unicode(UTF-8)文字コードの一部を対応する値に置換(関数:Replace)
  3. Unicode(UTF-8)文字コードをデコードし変換後の文字を取得(関数:HexDecode)

3つの処理

  1. 対象の文字をUnicode(UTF-8)文字コードにエンコード(関数:HexEncode)

    関数「HexEncode」を使用することで、対象の文字のUnicode(UTF-8)文字コードを取得します。
    (例)
    ${HexEncode('あ')} ⇒ e38181

    関数「HexEncode」:指定した文字列を16進数文字列としてエンコードする

  2. Unicode(UTF-8)文字コードの一部を対応する値に置換(関数:Replace)

    関数「Replace」を使用することで、文字コードの一部をカタカナ⇔ひらがなに対応する値に置換します。
    GoAnywhereでは16進数の加算減算ができないため、以下一覧より対応するそれぞれの置換処理(赤字部分)を直接指定します。

    (例)e38181(あ)の「18」を「2a」に変換
    ${Replace('e38181', '18', '2a')} ⇒ e382a1

    関数「Replace」:指定した文字列(1つ目のパラメータ)から検索パターン(2つ目のパラメータ)に該当する文字列を指定した値(3つ目のパラメータ)に置換する

    【Unicode(UTF-8)文字コード対応一覧】
    ひらがな  ⇒  カタカナ
    UTF-8 字 UTF-8 字
    E38181 ぁ E382A1 ァ
    E38182 あ E382A2 ア
    E38183 ぃ E382A3 ィ
    E38184 い E382A4 イ
    E38185 ぅ E382A5 ゥ
    E38186 う E382A6 ウ
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    E3818F く E382AF ク
    E38190 ぐ E382B0 グ
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    E3819F た E382BF タ
    E381A0 だ E38380 ダ
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    E381AF は E3838F ハ
    E381B0 ば E38390 バ
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    E381BF み E3839F ミ
    E38280 む E383A0 ム
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    ・
    E3828E ゎ E383AE ヮ
    E3828F わ E383AF ワ
    E38290 ゐ E383B0 ヰ
    E38291 ゑ E383B1 ヱ
    E38292 を E383B2 ヲ
    E38293 ん E383B3 ン
    ------ ・ E383B4 ヴ
    ------ ・ E383B5 ヵ
    ------ ・ E383B6 ヶ

  3. Unicode(UTF-8)文字コードをデコードし変換後の文字を取得(関数:HexDecode)

    関数「HexDecode」を使用することで、Unicode(UTF-8)文字コードをデコードして対応する文字を取得します。
    (例)
    ${HexDecode('e382a1')} ⇒ ア

    関数「HexDecode」:指定した16進数文字列をデコードする

3つ処理を一つの処理に統合

GoAnywhereの関数では、入れ子式に関数を使用することが可能なため、最終的には以下のように指定することができます。

(例)「あ」⇒「ア」に変換
${HexDecode(Replace(HexEncode('あ'), '18', '2a'))}

全てのひらがな、カタカナに対応

ひらがな、カタカナをUnicode(UTF-8)文字コードにした際に、変換のパターン(「18」⇒「2a」等)が一つではないため、どの文字が対象の場合でも対応可能なように全ての変換パターンを関数「Replace」で指定します。

(例)ひらがな⇒カタカナに変換
${HexDecode(Replace(Replace(Replace(Replace(Replace(Replace(HexEncode('[ひらがな]'), '18', '2a'), '19', '2b'), '1a', '38'), '1b', '39'), '28', '3a'), '29', '3b'))}
※[ひらがな]:任意のひらがなの文字列

また、カタカナのみに存在する文字があるため、それぞれ以下のように変換するように指定します。

  • ヴ ⇒ う
  • ヵ ⇒ か
  • ヶ ⇒ け
(例)カタカナ⇒ひらがなに変換
${HexDecode(Replace(Replace(Replace(Replace(Replace(Replace(HexEncode(Replace(Replace(Replace([カタカナ], 'ヴ', 'う'), 'ヵ', 'か'), 'ヶ', 'け')), '2a', '18'), '2b', '19'), '838', '81a'), '39', '1b'), '3a', '28'), '3b', '29'))}
※[カタカナ]:任意のカタカナの文字列

まとめ

GoAnywhereでも関数の組み合わせによって、カタカナ⇔ひらがなの変換ができました。

【ひらがな⇒カタカナ】

${HexDecode(Replace(Replace(Replace(Replace(Replace(Replace(HexEncode('[ひらがな]'), '18', '2a'), '19', '2b'), '1a', '38'), '1b', '39'), '28', '3a'), '29', '3b'))}
※[ひらがな]:任意のひらがなの文字列
プロジェクト画面(ひらがな⇒カタカナ)

ジョブログ画面(ひらがな⇒カタカナ)


【カタカナ⇒ひらがな】

${HexDecode(Replace(Replace(Replace(Replace(Replace(Replace(HexEncode(Replace(Replace(Replace([カタカナ], 'ヴ', 'う'), 'ヵ', 'か'), 'ヶ', 'け')), '2a', '18'), '2b', '19'), '838', '81a'), '39', '1b'), '3a', '28'), '3b', '29'))}
※[カタカナ]:任意のカタカナの文字列
プロジェクト画面(カタカナ⇒ひらがな)

ジョブログ画面(カタカナ⇒ひらがな)
※ひらがな、カタカナ以外の文字が含まれている場合は、Unicode(UTF-8)文字コードの関係で正常に変換できない場合があるため、処理を更新する必要があります。様々な文字が混在するデータのカタカナ⇔ひらがな変換やその他種類の文字の変換等については、製品サポートにお問い合わせください。

関連ページ:GoAnywhere MFTの他機能|キーポイント

SOLPACが選ばれる理由

WhySOLPAC