【データ加工・変換 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)文字コードの関係で正常に変換できない場合があるため、処理を更新する必要があります。様々な文字が混在するデータのカタカナ⇔ひらがな変換やその他種類の文字の変換等については、製品サポートにお問い合わせください。