文字エンコーディングとは、メモリ上で特定の文字セットの文字を表す数値コードの体系です。特定の言語の各文字には、一意の数値コード パターンが割り当てられています。エンコーディングが正しく処理されない場合は、Subversion 機能で問題が発生する可能性があります。
ロケールは、エンコーディング、言語、および国 (ない場合もある) を指定する文字列です。たとえば、韓国語のロケール設定として、「ko_KR.UTF-8」があります。
ロケールの選択および設定の方法については、システムのドキュメントを参照してください。
設定で使用されるいくつかの文字エンコーディングを次に示します。
システムの文字エンコーディングが EUC-KR である場合、韓国語文字を使用してファイルに名前を付けると、バージョン管理システムがその名前をリポジトリに格納します。システムの文字エンコーディングが同じ EUC-KR である別のユーザがそのファイルをチェックアウトした場合、表示されるファイル名は同じです。
ファイルをチェックアウトするユーザのシステムが EUC-JP エンコーディングに設定されており、プロジェクトで Subversion が使用されている場合は、Subversion がエラーを報告し、チェックアウトが拒否されます。これは、EUC-JP が日本語文字だけをサポートし、ファイル名で使用されている韓国語文字が EUC-JP エンコーディングに含まれないからです。
CollabNet は、ユーザ インターフェイス全体で UTF-8 (Unicode の一種) を使用します。Unicode を使用すると、同じファイル、ファイル名、文字列などで複数の言語が共存できます。Subversion では、「EUC-KR から UTF-8」などの組み合わせで、UTF-8 と相互にコード変換を行うことができます。ただし、複数のユーザと複数のマシンが異なる場所に配置されている場合は、問題が発生する可能性があります。ユーザがロケールを異なる値に設定し、したがってエンコーディングも異なる場合があるからです。ハイパーリンクにファイル名がある場合は、リンク内のテキストが文字化けして機能しなくなります。
注意: 単一マシンを使用している単一ユーザの場合、エンコーディングに関する問題はありません。
プロジェクトが Subversion を使用している場合、同じチェックインが行われると、ファイル名は Subversion によって元のエンコーディングから UTF-8 にコード変換され (チェックイン時)、CollabNet が Web サイトを公開すると UTF-8 として表示されます。同様に、Web ページ上の URL は、ブラウザによって UTF-8 で表示されます。これは、UTF-8 以外のエンコーディングを使用している開発者を例外として機能します。そのような開発者のディスクでは、ファイルが UTF 以外のエンコーディングを使用しています。Web ページに開発者のディスク上のファイルに対応する URL を入力すると、そのシステムでは UTF-8 に正常にコード変換されません。ブラウザは、それがすでに UTF-8 であるとみなし、コード変換しません。このため、問題の開発者がそのページを使用できないか、その開発者が使用できるようにエンコードをした場合は、他のユーザがそのページを使用できないという状況になります。
非 ASCII 名のファイルやディレクトリは、CollabNet プロジェクトの「remote published」ドキュメント ツリーの一部です。つまり、www/ディレクトリ内の任意の場所にチェックインされた場合、CollabNet は、それらのファイルやディレクトリを UTF-8 として公開します。
日本の開発者が日本語文字を使用してファイルに名前を付けた場合、Subversion は、UTF-8 でファイル名をエンコードして、リポジトリにファイルを格納します。その後、米国の別の開発者が同じファイルをチェックアウトした場合は、UTF-8 でデコードされ、再度、日本語文字で表示されます。
注意: UTF-8 は、名前を 1 つの設定の 1 つの言語から別の設定の同じ言語 (日本語 > UTF-8 > 日本語) にエンコードおよびデコードできるだけなので、UTF-8 によるコード変換は、米国の開発者にとってはあまり意味がないものになります。UTF は変換されません。したがって、チェックアウトされたファイル名には、最初にチェックインした日本語のファイル名が含まれます。
通常、ファイル名やディレクトリ名は最初に自分のコンピュータで作成します。バージョン管理ツールの「コミット」プロセスまたは何らかの Web ページの「アップロード」プロセスを使用してファイルをコミットすると、ほとんどのサービスは、設定されているエンコーディングを検出し、そのエンコーディングでファイル名やディレクトリ名を解釈し、すぐに UTF-8 に変換します。または、以下に説明する他の方法で名前が表示される場合にも、最終的に同様に変換されます。
ファイルが CollabNet 内に格納された後で、そのファイル名が問題になる 2 番目の場所は、CollabNet のさまざまな参照機能です。[ドキュメントとファイル] 領域などがあります。これらの領域では、実際には UTF-8 を使用して名前が表示されます。CollabNet Enterprise Edition 3.0.0 以前の従来のデータをサポートするために、これらの領域では、必要であると判断した場合に、名前を従来のエンコーディングから UTF-8 に変換しようとします。ただし、先ほど説明したように、その判断を行う確実な方法はありません。サイトが CEE の以前のバージョンから移行されており、そこで従来のエンコーディングがデフォルトであった場合は、この判断が正しく機能し、名前が正しく表示される可能性が高くなります。ただし、最も確実な方法は、もちろん、システムの判断に任せず、最初から UTF-8 を使用することです。
バージョン管理からファイルをコンピュータにチェックアウトする場合。先ほど説明したように、バージョン管理ツールとして Subversion を使用している場合は、エンコーディング設定が自動的に検出され、名前がそのエンコーディングにコード変換されます。このため、名前は正しく表示されます。つまり、Subversion を使用しているプロジェクト メンバーは、エンコーディング設定が異なっていても、実際に正しく共同作業できます (ただし、この重要な例外については次の段落を参照)。
最後に、プロジェクトにコミットされるファイルは、実際には Web ページであることが多く、これらの Web ページには他の Web ページを参照する URL が含まれ、これらのファイルもプロジェクトにコミットされます。これは、インターフェイスの 4 番目の領域です。ここで、ファイル内の文字をコード変換するバージョン管理システムがないことを理解しておく必要があります。Subversion は、ファイルの名前のエンコーディングを修正しますが、ファイルの内容のエンコーディングは変更しません。つまり、CollabNet がページを提供する領域では、ファイル内の URL を構成するビットのコレクションが、ディスク上のファイル名を構成するビットのコレクションと一致する必要があります。
先ほど言及したように、CollabNet はページを UTF-8 で提供するため、Web ページを参照する URL も UTF-8 である必要があります。ただし、Web サイトを作成する場合は、Web サイトを公開する前に自分のローカル マシンでサイトをテストすることが普通です。つまり、ページ上の URL を構成するビットのコレクションは、自分のコンピュータ上のファイル名を構成するビットのコレクションとも一致する必要があります。このため、UTF-8 を使用するように設定しておく必要があります。同じことが他の種類のファイルにも当てはまります。たとえば、ほとんどのプログラミング言語には、1 つのファイルを別のファイルに論理的に「インクルード」するためのメカニズムがあります。これらのファイル参照もビット単位で一致する必要があり、ファイル内のエンコーディングは、ファイル名のエンコーディングと一致する必要があります。Subversion を使用している場合でも、このようなファイルを使用しているすべてのプロジェクト メンバーが同じエンコーディング設定を使用する必要があり、それは UTF-8 にする必要があります。
次に、UTF-8 ではなく、従来のエンコーディングで作業する必要がある場合を考えます。たとえば、従来のエンコーディングで名前が付けられた既存のファイルがある場合がこれに当たります。
この問題に対処する最も簡単な方法は、96 文字の基本 ASCII アルファベット (英字、数字、一部の記号) に限定することです。ここで説明したすべてのエンコーディングは、これらの文字のすべてを同じビット コレクションを使用して表します。このため、基本 ASCII アルファベットに限定すれば、エンコーディング設定は問題になりません。もちろん、これは極めて制限的な方法です。この方法では、英語しか表示できません。それでも、Unicode が登場するまでは、この方法が複数の言語システムを実現する唯一の方法でした。
この方法では制限が多すぎ、UTF-8 の使用も現実的に難しい場合は、すべてのユーザが同じエンコーディング設定を使用するようにすることで、必要な条件の多くは満たすことができます。この方法は、想像ほど難しくはありません。特定の国または言語用に設定されているコンピュータを購入する場合、その設定には、その言語に適したエンコーディング (通常は、ここで説明したエンコーディングの 1 つ) が含まれます。すべてのユーザが同じオペレーティング システムを使用している場合は、これで十分です。
ユーザが異なるオペレーティング システムを使用している場合 (または、オペレーティング システムのバージョンが異なる場合) は、一部のユーザで名前やテキストが文字化けする場合があります。これらのユーザは、プロジェクトのエンコーディングを使用するように設定を変更する必要があります。この方法では解決できない最も重要なことは、前に言及した URL の問題です。この問題があるため、Web では、すべてのサイト ページが ASCII で表示できない特定の言語である場合でも、Web サイトのファイル名やディレクトリ名には ASCII 名を使用することが標準になっています。ASCII ファイル名およびディレクトリ名を使用し、ここで説明した従来のエンコーディングを使用している場合は、引き続き ASCII URL とローカル言語ページを提供できます。