PluginEncoding.pas LazarusのWindowsソフトでUTF-8/CP932/EUC-JPを変換
PluginEncoding.pasは、Windows版Lazarus/Free Pascalから、UTF-8、CP932(Shift_JIS系)、EUC-JPおよび 任意のWindowsコードページをUTF-8を経由し相互変換するためのPascal Unitです。
BkPluginLazarusTemplateの構成ファイルとして開発したUnitですが、 Becky! Ver.2用プラグインDLLだけでなく、通常のLazarus製Windows EXEからも利用できます。
主な機能、特徴
- UTF-8からCP932(Shift_JIS系)への変換
- CP932(Shift_JIS系)からUTF-8への変換
- UTF-8からEUC-JPへの変換
- EUC-JPからUTF-8への変換
- UTF-8から指定したWindowsコードページへの変換
- 指定したWindowsコードページからUTF-8への変換
- Windows APIによる文字コード変換
- Lazarus製DLLおよびEXEからの利用
- 外部コンポーネントを追加せずに利用可能
- MIT Licenseによる再利用
動作確認環境
- 開発環境:Lazarus 4.8 64bit/Free Pascal
- 対象OS:Windows
- 確認した形式:通常の64bit Windows EXE/Win32プラグインDLL
- 収録元:BkPluginLazarusTemplate v1.2.0
別の 64bit Windows EXEに組み込み、次の変換が動作することを確認しています。
- UTF-8 → CP932(Shift_JIS系)
- CP932(Shift_JIS系) → UTF-8
- UTF-8 → EUC-JP
- EUC-JP → UTF-8
作成した背景
Lazarusには、文字コード変換に利用できるLConvEncoding Unitが付属しています。
ただし、Lazarus 4.8のWindows環境で確認した範囲では、LConvEncodingによるEUC-JP変換は利用できませんでした。
PluginEncoding.pasは、LConvEncoding全体を置き換えるものではありません。
Windows APIが提供するコードページ変換を利用し、
Windows版LazarusでEUC-JPなどを扱う必要がある場合の補完手段として作成しています。
EUC-JP変換には、Windowsコードページ20932を使用しています。
主な公開関数
function Utf8ToCp932(const S: UTF8String): AnsiString; function Cp932ToUtf8(const S: AnsiString): UTF8String; function Utf8ToMultiByteCodePage( const S: UTF8String; CodePage: Cardinal ): AnsiString; function MultiByteCodePageToUtf8( const S: AnsiString; CodePage: Cardinal ): UTF8String; function Utf8ToEucJp(const S: UTF8String): AnsiString; function EucJpToUtf8(const S: AnsiString): UTF8String;
- Utf8ToCp932/Cp932ToUtf8
UTF-8とCP932を相互変換します。 - Utf8ToEucJp/EucJpToUtf8
UTF-8とEUC-JPを相互変換します。 - Utf8ToMultiByteCodePage/MultiByteCodePageToUtf8
Windowsコードページを指定して変換します。
基本的な使い方
PluginEncoding.pasを利用するLazarusプロジェクトのフォルダーへコピーし、 文字コード変換を行うUnitのuses節へPluginEncodingを追加します。
uses Classes, SysUtils, PluginEncoding;
他のUnitに同名の関数が存在する場合や、呼び出すUnitを明示したい場合は、 次のようにUnit名を付けて呼び出すこともできます。
ConvertedText := PluginEncoding.Utf8ToEucJp(SourceText);
詳しい関数宣言、実装および戻り値の扱いについては、
BkPluginLazarusTemplate-v1.2.0-source.zipに含まれるPluginEncoding.pasを参照してください。
指定できるのは、実行するWindows環境で利用可能なコードページです。
文字コード変換の仕組み
PluginEncoding.pasは、Windows APIのMultiByteToWideCharとWideCharToMultiByteを使用しています。
マルチバイト文字列からUTF-8へ変換する場合は、指定されたコードページの文字列を一度Unicodeへ変換し、
そのUnicode文字列をUTF-8へ変換します。
UTF-8からマルチバイト文字列へ変換する場合は、UTF-8をUnicodeへ変換した後、
指定されたWindowsコードページへ変換します。
Windows APIを使うため、マルチプラットホームを想定して実装されている、LConvEncodingを使う場合より、
若干生成バイナリサイズが小さくなる場合が有ります。
対応範囲と制限
- Windows専用のUnitです。
- Windows APIを使用するため、LinuxおよびmacOSには対応していません。
- Windows側で利用可能なコードページを使用します。
- 変換先コードページに存在しない文字は、元の文字どおりに表現できません。
- すべてのUnicode文字が各コードページとの間で往復変換できることを保証するものではありません。
- 空文字が入力された場合は空文字を返します。
- 変換に失敗した場合も空文字を返します。
- 入力が空だった場合と変換に失敗した場合を、戻り値だけで区別することはできません。
- 不正なバイト列を含む文字列について、意図した結果になることを保証するものではありません。
- LConvEncoding全体を置き換えることを目的としたUnitではありません。
PluginEncoding.pasの変換関数は、変換に失敗した場合に空文字を返します。 入力自体が空文字だった場合も同じ戻り値になるため、両者を戻り値だけで区別することはできません。
本ページでは、Windowsコードページ932を「CP932」と表記しています。
CP932は、Shift_JISを基礎として、NEC特殊文字やIBM拡張文字などを追加したWindowsの日本語文字コードです。
厳密には規格上のShift_JISと完全に同一ではありませんが、
WindowsアプリケーションではCP932が「Shift_JIS」と表記されることも多いため、
本ページでは検索性と分かりやすさを考慮し、「CP932(Shift_JIS系)」という表記も使用しています。
ダウンロード
PluginEncoding.pasは、BkPluginLazarusTemplate v1.2.0のソースコード版に含まれています。
PluginEncoding.pas単独のZIPは、現在配布していません。
現在のテンプレート公開ページでは、ソースZIP、SHA256、基本的な使用方法、ライセンス、SDK由来部分がまとめて案内されています。
ZIP展開後のPluginEncoding.pasを、ご自分の利用するLazarusプロジェクトへコピーするだけですぐに利用できます。
New-BeckyPlugin.ps1の実行は、PluginEncodingだけを使う人には不要です。
ソースコードとライセンス
PluginEncoding.pasは、MIT Licenseで公開しています。
改変、再利用、社内利用、再配布を行う場合は、配布ファイルに含まれる、 LICENSEをご確認ください。
SPDX-FileCopyrightText: 2026 OPEN-CIRCUIT, LTD. SPDX-License-Identifier: MIT
PluginEncoding.pasを別のプロジェクトへコピーして再利用または再配布する場合は、 ファイル内の著作権表示および、ライセンス表示を保持し、MIT Licenseの条件に従ってください。
BkPluginLazarusTemplateとの関係
PluginEncoding.pasは、LazarusでBecky! Ver.2用プラグインを作成するためのBkPluginLazarusTemplateに含まれる共通Unitです。
BkPluginLazarusTemplateおよび、BkPluginLazarusTemplateで新たに生成したプロジェクトでは、
Becky! Ver.2が使用するCP932文字列との変換、EUC-JPメール本文の変換、
その他のWindowsコードページを使用する文字列変換に利用できます。
PluginEncoding.pas自体はBecky! Ver.2のAPIへ依存していないため、通常のLazarus製Windows EXE内でも利用できます。
免責事項・サポート
本ソフトウェアは無保証で提供しています。
本ソースコードの使用または使用不能によって生じた損害について、公開元は責任を負いません。
すべての文字、文字コード、入力データおよび、 Windows環境での変換結果を保証するものではありません。
本ソースコードに関する個別の導入支援、Lazarusプロジェクトへの組み込み、文字化け調査、 コードページの選定、ソースコード変更またはカスタマイズには対応していません。
公開元
PluginEncoding.pas は、有限会社オープンサーキットが開発・公開しています。

