ホームページ >php教程 >PHP开发 >Linux 環境でファイル内の漢字が文字化けする場合がある

Linux 環境でファイル内の漢字が文字化けする場合がある

高洛峰
高洛峰オリジナル
2016-12-15 16:28:491603ブラウズ

実は、文字化けの問題は、システムに組み込まれている文字セットが正しく使えないために、OSがテキストを認識できず、文字化けが発生してしまうことが原因です。 ...

まず、Linux OS を制御する言語環境変数が $LANG と $LC_ALL であることを知っておく必要があります。文字化けの問題を解決するには、上記 2 つの変数を正しく設定するだけです。文字化けには 2 つの状況があります:
1. ターミナルでの文字化け (純粋なシェル インターフェイス)
vi /etc/profile
export LC_ALL="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF- 8:en_US:en:zh:zh_TW:zh_CN.BIG5 "
保存して終了し、システムを再起動してください。

2. en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5 のコードが文字化けしています"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW: zh_CN.BIG5"
再起動を保存して…

中国語が多いので文字セット コード間の互換性についてはよくわからないので、できるだけ多くの異なるコードを見つけて書き留めるようにしました。一般的な解決策は、変数を変更することです。環境パラメータを制御し、OS がサポートする文字セットを増やします (前提条件は文字がカーネル上に存在することです。そうでない場合はカーネルをコンパイルする必要があります)...


開発中 WEB システムは RED HEAD にデプロイされています。
RH バージョン情報:
LSB バージョン: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
ディストリビューター ID: RedHatEnterpriseServer P説明: Red Hat Enterprise Linux Server リリース 5 (tikanga)
リリース: 5
コード名: Tikanga
---------------------------- - --
ロケール情報
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF -8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN. -8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
----------- - -------------------------
プログラムディレクトリには読み出してページに表示する必要のあるファイルがいくつかあるため、ファイル名はは中国語です
File.list()メソッドを使用しています ファイル名の一覧を取得しましたが、表示されるものはすべて文字化けしています。
新しい文字列(ファイル名.getBytes("utf-8"),"GBK");
新しい文字列(ファイル名.getBytes("iso-8859-1"),"GBK"); ), GBK");

どれも機能しません、
System.getProperty("file.encoding") を使用すると、結果は「utf-8」になります
さらに、ls コマンドを使用して表示すると文字化けします。 ls - -show-control-chars コマンドは中国語の名前 (コンソール) を表示します




ロケールを追加します。お使いのシステムは gbk 文字セットをサポートしていないと推定されます

ubuntu では vi /var/lib です/locales/supported.d. /local

locale-gen を追加した後、文字セット キャッシュを更新します


Linux で Windows 上でファイルを操作する必要がある場合、Windows のデフォルトのファイル エンコード変換の問題が頻繁に発生することがあります。ファイル形式は GBK (gb2312) で、Linux では一般に UTF-8 が使用されます。 ここでは、Linux でファイル エンコーディングを確認する方法とファイルを変換する方法を説明します。
Linux でファイル エンコーディングを確認します。次の方法で実行できます:
1. Vim でファイルエンコーディングを直接表示できます
:set fileencoding
を使用してファイルエンコーディング形式を表示します
他のエンコーディング形式でファイルを表示したい場合、または Vim を使用してファイルを表示したい場合文字化けの問題がある場合は、
~/.vimrc ファイルに次の内容を追加できます:
set encoding=utf-8
fileencodings=ucs-bom,utf-8,cp936
このようにして、vim はファイルのエンコードを自動的に識別できます (UTF-8 または GBK でエンコードされたファイルを自動的に識別できます)。適切なエンコードが見つからない場合は、fileencoding によって提供されるエンコード リストに従って試行します。 -1 (ASCII) エンコードを開きます。
2. enca (このコマンドがシステムにインストールされていない場合は、 sudo yum install -y enca を使用してインストールできます)
$ enca ファイル名
ファイル名: ユニバーサル変換形式 8 ビット
CRLF 行ターミネータ
必須 注意すべき点は、enca が一部の GBK エンコード ファイルをうまく認識しないことです。
認識できないエンコーディング
2 番目に、ファイル エンコーディングを変換します。ファイルを utf-8 形式に変換する場合
:set fileencoding=utf-8
2. iconv 変換、iconv コマンドの形式は次のとおりです:
iconv -f encoding -t encoding inputfile
たとえば、UTF-8 でエンコードされたファイルを変換します。ファイルをGBKエンコードに変換します
iconv -f GBK -t UTF-8 file1 -o file2
3. enconv ファイルのエンコードを変換します
例えば、GBKエンコードされたファイルをUTF-8エンコードに変換したい場合、操作は次のようになります
enconv -L zh_CN -x UTF-8 filename
3 つ、ファイル名エンコード変換:
Linux から Windows に、または Windows から Linux にファイルをコピーすると、中国語のファイル名が文字化けすることがあります。この問題の原因は、デフォルトの中国語ファイル名です。 Windows のファイル名の中国語エンコードは GBK です。Linux のデフォルトのファイル名エンコードは UTF8 です。この問題を解決するには、ファイル名をトランスコードする必要があります。
Linux では、ファイル名エンコーディングを変換するツール convmv が特別に提供されており、ファイル名を GBK から UTF-8 エンコーディング、または UTF-8 から GBK に変換できます。
まず、convmv がシステムにインストールされているかどうかを確認します。インストールされていない場合は、
yum -y install convmv を使用してインストールします。

convmv の具体的な使用法を見てみましょう:
convmv -f ソースエンコーディング -t 新しいエンコーディング [オプション] ファイル名
共通パラメータ:
-r サブフォルダーの再帰処理
–notest 実際の操作、デフォルトで注意してくださいファイルに対して実際の操作は実行されませんが、単なるテストです。
–list は、サポートされているすべてのエンコーディングを表示します
–unescap %20 をスペースに変更するなど、エスケープすることができます

たとえば、utf8 でエンコードされたファイル名を GBK エンコーディングに変換する場合、コマンドは次のようになります:
convmv -f UTF- 8 -t GBK –notest utf8 エンコードされたファイル名
この変換後、「utf8 エンコードされたファイル名」は GBK エンコードに変換されます (ファイル名のエンコードのみが変換され、ファイルの内容は変更されません)


4 つの vim エンコード モード設定
すべての一般的なテキスト エディターと同様に、Vim はさまざまな文字エンコードでファイルを編集できます。これには、当然、UCS-2 や UTF-8 などの一般的な Unicode エンコード方法が含まれます。残念ながら、Linux 世界の多くのソフトウェアと同様に、これを自分で設定する必要があります。
Vim には、文字エンコーディング方法に関連する 4 つのオプション、encoding、fileencoding、fileencodings、termencoding があります (これらのオプションの可能な値については、Vim オンライン ヘルプのヘルプ エンコーディング名を参照してください。それらの意味は次のとおりです:
* エンコーディング)。 : Vim 内部 Vim のバッファー、メニュー テキスト、メッセージ テキストなどを含む、使用される文字エンコーディング。デフォルトは、ロケールの選択に基づいています。ユーザーマニュアルでは、.vimrc 内の値のみを変更することを推奨しています。たとえば、vim エンコードが utf-8 で、編集されたファイルが cp936 でエンコードされている場合、vim は読み取ったファイルを utf-8 に自動的に変換します (vim は読み取れる方法です)。ファイルを書き込むと、自動的に cp936 (ファイルの保存エンコーディング) に変換されます。
* fileencoding: Vim で現在編集されているファイルの文字エンコーディング方式。Vim はファイルを保存するときにもファイルを変換します。この文字で保存します。エンコーディング (ファイルが新しいかどうかに関係なく)。
* fileencodings: Vim は、fileencoding の連続リストを自動的に検出します。起動時に、リストされている文字エンコーディングに従って、開かれるファイルの文字エンコーディングを 1 つずつ検出し、最後に検出された文字エンコーディングを fileencoding に設定します。したがって、Unicode エンコード方式をこのリストの先頭に置き、ラテン語エンコード方式 latin1 を最後に置くのが最善です。
* termencoding: Vim が動作するターミナル (または Windows のコンソール ウィンドウ) の文字エンコード方式。 vim が配置されている用語が vim エンコーディングと同じである場合、設定は必要ありません。それ以外の場合は、vim の termencoding オプションを使用して、用語エンコーディングに自動的に変換できます。このオプションは、Windows で一般的に使用される GUI モードの gVim では無効です。コンソール モードの Vim では、これは Windows コンソールのコード ページであり、通常は変換されません。変更する必要はありません。


五番目、Vimの複数文字エンコード作業方法
1. Vimを起動し、.vimrcに設定されたエンコード値に従ってバッファ、メニューテキスト、メッセージテキストの文字エンコード方法を設定します。

2. 編集が必要なファイルを読み取り、fileencodings にリストされている文字エンコード方式に従ってファイルのエンコード方式を 1 つずつ検出します。そして、fileencoding を、検出された一見正しい (注 1) 文字エンコーディングに設定します。

3. fileencodingとencodingの値を比較し、異なる場合はiconvを呼び出してファイルの内容をencodingで記述された文字エンコード方式に変換し、このファイル用に開いたバッファに変換後の内容を入れます。このファイルの編集を開始できるようになります。この手順を完了するには、外部の iconv.dll を呼び出す必要があることに注意してください (注 2)。このファイルが $VIMRUNTIME または PATH 環境変数にリストされている他のディレクトリに存在することを確認する必要があります。

4. 編集後にファイルを保存するときに、fileencodingとencodingの値を再度比較します。異なる場合は再度 iconv を呼び出し、保存するバッファ内のテキストを fileencoding で記述された文字エンコーディングに変換し、指定したファイルに保存します。繰り返しになりますが、これには iconv.dll を呼び出す必要があります。Unicode にはほぼすべての言語の文字を含めることができ、Unicode の UTF-8 エンコーディングは非常にコスト効率の高いエンコーディングであるため (スペース消費量が UCS-2 より小さい)、次の値を使用することをお勧めします。エンコーディングはutf-8に設定します。これを行うもう 1 つの理由は、エンコードが utf-8 に設定されている場合、Vim はファイルのエンコード方式をより正確に自動的に検出するためです (おそらくこれが主な理由です。ファイルを中国語の Windows で編集すると、他のソフトウェアとのアカウント互換性 ファイル エンコーディングを GB2312/GBK に設定する方が適切であるため、ファイル エンコーディングを中国語に設定することをお勧めします (中国語はエイリアスであり、Unix では gb2312、Windows では cp936 を意味します。これは、次のコード ページです) GBK)

Linux での中国語の文字化けファイルに関連するその他の記事については、PHP 中国語 Web サイトに注目してください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。