![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() 国際化とローカライズ ![]() Unicodeモードの構成、サポートされている文字セットの使用、非ASCIIデータの取り扱いについて ![]() 概要 ![]() この記事では、Unicodeモードで動作させるためのPERFORCEサーバの構成方法、および異なる文字セットを操作するためのPERFORCEクライアントの構成方法を説明します。また、PERFORCEでマルチバイト文字(非ASCIIのデータ)を取り扱う際に起こりうる問題と、その解決策についても述べます。 ![]() ![]() 詳細 ![]() PERFORCEにおいてマルチバイト文字のセットを取り扱う際、ユーザ要件によって、いくつかの方法があります。
![]() ![]() PERFORCEサーバをUnicodeモードに切り換える ![]() PERFORCEをそのような環境で使用する前に、まずサーバにUnicodeモードで動作するよう指示しなければなりません。このモードで動作するようにサーバを設定するには、PERFORCEサーバをいったん停止させ、PERFORCEサーバルート・ディレクトリ上で次のコマンドを実行します。 ![]() p4d -xi ![]() このコマンドは、既存のメタデータがすべて有効なUTF8であることを検証し、保護されたカウンタ"unicode"を設定して、p4dが今後実行される際にUnicodeモードで動作するように指示します。このモードがサーバに設定されると、無効にすることはできません(すなわち、非Unicodeモードに戻ることはできません)。p4d -xi によってサーバをUnicodeモードに切り換えた後は、通常お使いのオプションでp4dを起動することができます。 ![]() ![]() 重要事項: ![]() 時として、p4d -xi コマンドによりサーバをUnicodeモードに切り換えようとすると、サーバが以下の応答を返すことがあります。 ![]() Table db.user has 14 rows with invalid UTF8. Table db.domain has 1 rows with invalid UTF8. ... Perforce server error: Database has 14 tables with non-UTF8 text and can't be switched to Unicode mode. ![]() これを解決するには、次のどちらかの操作を行います。 一つめの方法を示します。 ![]()
![]() 二つめの方法を示します。 ![]()
![]() 適切なUTF8に変換するには、利用可能な何らかの文字セット変換ツールを使用することもできます。"iconv" ツール/コンバータは、UNIXとWindowsの両OSで利用でき、適切な選択です。ただし、"iconv" を使ったとき、ドイツ語のウムラウト文字が欠落する場合がありますので、実行後には p4 verify による検証を行う必要があります。 ![]() ![]() ユーザへの注意事項 ![]() PERFORCEをUnicode環境で使用するには、クライアント・マシン上にP4CHARSET環境変数を設定しなければなりません。設定していないと、P4VまたはP4SCC.DLLを使用しているユーザの場合はUnicodeが有効であるサーバへの最初の接続時にエンコーディングを選択するよう要求され、それ以外のユーザの場合は "Unicode server permits only unicode enabled clients"(UnicodeサーバにはUnicodeが有効にされたクライアントのみ使用できます)というメッセージが表示されます。 ![]() ![]() 重要事項: ![]() 同一コンピュータ上に異なるエンコーディングを混在させることによって結果的にP4CHARSET設定が混在すると、変換に伴う問題が生じる可能性が高いことに注意してください。 ![]() 以下の表に、(米国において)最もよく使用されるP4CHARSETの値をいくつか示します。 ![]()
![]() P4CHARSETの値の一つに、"none" があります。グローバル・オプション "-C" で設定すれば、既に設定されているP4CHARSET値をオーバライドし、UnicodeモードのPERFORCEサーバに接続できます。サポートされているP4CHARSET値の完全なリストを見るには、'p4 help charset'を実行するか、Perforce 国際語モードに関する注意事項をご参照ください。 ![]() * utf8は翻訳されませんが、ファイルの内容は検証されます。 ![]() ** utf16では、p4 コマンドライン・クライアントが機能するためには、P4COMMANDCHARSET が異なる文字セット(非utf16)に設定されている必要があります。 ![]() p4 -C utf16 -Q utf8 sync some_files ![]() ただし、"-C"はP4CHARSETに対するコマンドライン・オプションであり、"-Q"はP4COMMANDCHARSETに対するコマンドライン・オプションです。 ![]() P4VおよびP4WINには、[プリファレンス]ダイアログ内にP4CHARSETをリセットするためのフィールドがあります。 ![]() ![]() Windows環境でのP4CHARSETの設定: ![]()
![]() ![]() UNIX環境でのP4CHARSETの設定: ![]() コマンド・シェルまたは .kshrc、.cshrc、.profile などの起動スクリプトにより、P4CHARSETを適切な値に設定します。環境変数 LANG または LOCALE の現在の設定を調べることによって、P4CHARSETに対する適切な値を決定することができます。 ![]()
![]() ![]() MAC環境でのP4CHARSETの設定: ![]() 例えば、次のようにコマンド・シェルでP4CHARSETを適切な値に設定するか、 ![]() export P4CHARSET=utf8 ![]() もしくは、~/.MacOSX ディレクトリにある "environment.plist" の中でこれを設定します。 ![]() 前者の方法では、実行中のシェル・セッション内でしか設定が有効にならないことに注意してください。恒久的に設定するためには、ユーザの起動スクリプトか environment.plist ファイルの中で設定する必要があります。デフォルトのシェルがbashの場合、起動スクリプトは ~/.bashrc です。 ![]() P4CHARSETが環境に設定されていない場合、P4Vユーザは最初にUnicodeサーバに接続する際に、ドロップダウン・リストから設定を選択するよう要求されます。 ![]() ![]() サーバがUnicodeモードかどうかの確認 ![]() Unicodeモードのサーバに対してコマンドを実行すると、次のようにエラーが返ってくる場合があります。 ![]() $ p4 counters Unicode server permits only unicode enabled clients. (Unicodeサーバに接続できるのは、Unicodeモードクライアントのみである。) ![]() クライアントもUnicodeモードであれば、p4 counters の実行結果には、'unicode'カウンタが表示され、その値は '1' となります。 ![]() 例: $p4 counters change = 1 unicode = 1 upgrade = 21 ![]() クライアント側でP4CHARSETを設定していないために、p4 counters が実行できない場合、タグ付きの p4 info を実行することができます。p4 -Ztag info によって出力されるタグ付き情報には、enabled という値を持つunicodeフィールドが含まれます。 ![]() 例: $ p4 -Ztag info [...] ... clientAddress 127.0.0.1:50936 ... unicode enabled ... serverAddress localhost:9988 ... serverRoot introot/ ... serverDate 2010/10/21 11:36:37 -0700 PDT ... serverUptime 02:46:52 ... caseHandling sensitive ![]() ![]() Unicodeモードで動作させる際に起こりうる問題 ![]() 「Cannot translate(翻訳できない)」とのエラー・メッセージ ![]() このメッセージは、PERFORCEサーバによってクライアント・マシンに送られる文字を含まない文字セットによりクライアント・マシンが構成されている場合に表示されます。 クライアント・マシンはマッピングされていない文字を表示できません。 ![]() 例えば、クライアント・マシンがshift-JIS 文字セットを使用するよう構成されており、ディポにはShift-JISにマッピングされていない日本語EUC文字セットに属する文字を名前にもつファイルがある場合、それらのファイルを一覧表示する p4 files コマンドまたは p4 changes コマンドを実行すると「~を翻訳できません」というエラー・メッセージが表示されます。 ![]() ![]() UnicodeのPERFORCE識別子に対する長さの制限 ![]() PERFORCE サーバでは、ジョブのコメントの索引付け、ファイル名の指定、ビュー・マッピングの制御、およびクライアント名やラベル名などのオブジェクトの識別に使用される文字列の長さに対し、内部的な制限があります。 ![]() 最も一般的な制限値は1024バイトです。いくつかのUnicode文字は2バイト以上に拡張されることがあるため、ある種のUnicodeエントリがPERFORCE内部の制限を越える可能性があります。 ![]() 基本的なUnicode文字は3バイトを超えて拡張されないため、PERFORCE内部の制限値を3で割れば、Unicodeシーケンスが制限を超えないようにすることができます。 ![]() また、UnicodeシーケンスがPERFORCEの制限を超えないようにするために、341文字を超えるUnicodeでクライアント名またはビュー・パターンを作成しないでください。 ![]() 正常な使用状況では、これが大きな制約となることはないはずです。 ![]() ![]() 非Unicodeサーバで"unicode"ファイルタイプを使用する際に起こりうる問題 ![]() 国際語モードで動作していないサーバでは、PERFORCEの"unicode"ファイルタイプの動作が大きく異なります。クライアントとサーバは共に、ファイルが有効なUTF8であると見なし、有効なUTF8としてファイルを保存します。何らかの方法によって内容の翻訳や検証を試みることはありません。したがって、ファイルをUTF8として保存可能であるエディタを使用して保存しなければなりません。この条件を除き、ユーザは通常どおりPERFORCEサーバにアクセスできます。クライアントでP4CHARSETを設定する必要はありません。 ![]() ![]() 改行が正しく保存されない件 ![]() ファイルは、ユーザによって、UTF8ではなくUTF16でチェックインされています。古いリビジョンにロールバックするか、ファイルをUTF8として保存し直してください。 ![]() ![]()
|