Dockerコンテナの中国語言語パックの設定の問題を解決する

Dockerコンテナの中国語言語パックの設定の問題を解決する

Dockerでdocker search centosを使用する場合

docker pull docker.io/centos を使用してベースイメージをダウンロードします。

このイメージは中国語をサポートしていません。docker attach container ID を使用してコンテナーに入り、「locale」を使用して表示することができます。

「locale -a」を使用してシステム言語パッケージを確認すると、中国語パッケージがないことがわかります。

解決:

1. yum install kde-l10n-Chinese -y 言語パックをインストールします (Centos 7 の場合)

2. yum reinstall glibc-common -y を実行して gitbc パッケージを更新します (イメージによってパッケージの一部の機能が削除されているため、更新する必要があります)

3. localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 (システム言語パックを設定)

4. ENV LC_ALL zh_CN.UTF-8 は環境変数を設定することで設定されます (/etc/locale.conf ファイルを直接変更できますが、再起動が必要です)

5. Dockerfileを使用する場合は、以下を参照してください。

# バージョン情報 docker.io/centos:latest
メンテナー mapengfei "[email protected]"
#システムエンコーディングを設定する RUN yum install kde-l10n-Chinese -y
yum install glibc-common -yを実行します。
実行 localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
#RUN エクスポート LANG=zh_CN.UTF-8
#RUN echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
#ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

補足: Dockerコンテナの文字エンコーディングを-zh_CN.UTF-8中国語文字セットに変更します

バージョン履歴

2019年4月26日初版

問題の説明

同社の Java プロジェクトでは、ファイル形式の変換に OpenOffice と pdf2html を使用しています。Word、ppt、pdf ファイルはすべて問題なく変換されますが、Excel では変換後に文字化けが発生します。

背景

プロジェクトは Docker コンテナで実行されます。Docker バージョン: Docker バージョン 18.06.1-ce、ビルド e68fc7a

コンテナ システム カーネル バージョン: 3.10.0-514.el7.x86_64

コンテナシステムバージョン: Cent0S7

原因

アーキテクチャとやり取りした結果、Word、PDF、PPTファイルはOpenOfficeとPDF2HTMLで変換されますが、Excelファイルはこの方法で処理されず、インターネット上のオープンソースのJavaコードを使用して実装されていることがわかりました。コードを読んだ後、アーキテクチャは、このコードがExcelファイルを変換するときにホストシステムの言語構成を読み取ることを発見したため、問題の原因はシステムの文字エンコード設定であると判断されました。

回避策

システムの文字エンコードを確認すると、問題はありません (最初の 3 行に注目してください)。文字セットは正しく設定されているようです。最初の 3 行に問題がないか確認してください。オンラインでは、これは中国語の文字セットがインストールされていないことが原因であると言われています。

[root@4273aa460888 opt]# ロケール
ロケール: LC_CTYPE をデフォルト ロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_MESSAGES をデフォルトのロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_ALL をデフォルト ロケールに設定できません: そのようなファイルまたはディレクトリはありません
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.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

このマシンにどの文字セットがインストールされているか確認してみましょう。 しまった、中国語の文字セットがインストールされていない... (インストールされていないと、設定しても役に立たない)

[root@4273aa460888 opt]# ロケール -a
ロケール: LC_CTYPE をデフォルト ロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_MESSAGES をデフォルトのロケールに設定できません: そのようなファイルまたはディレクトリはありません
ロケール: LC_COLLATE をデフォルトに設定できません ロケール: そのようなファイルまたはディレクトリはありません
C
POSIX
en_US.utf8

/etc/locale.conf の内容を見てみましょう。 ああ、まだ英語の文字セットのままです...

[root@4273aa460888 opt]# cat /etc/locale.conf 
LANG="en_US.UTF-8"

さて、次に中国語の文字セットをインストールしましょう

yum.confファイル内の言語設定を削除します。

sed -i '13'd /etc/yum.conf

フォントとglibcをインストールする

yum インストール -y kde-l10n-中国語 glibc-common

もう一度見てみましょう。最後に、

[root@35b0e9b16498 opt]# ロケール -a|grep zh
日本語
原文
翻訳元
翻訳元
utf8 形式
日本語
翻訳元
utf8 の
翻訳
原文
翻訳元
utf8 は、
日本語
翻訳元
zh_TW.euctw
utf8 は

/etc/locale.confファイルを再度変更してみましょう

echo -e 'export LANG="zh_CN.UTF-8"\nexport LC_ALL="zh_CN.UTF-8"' > /etc/locale.conf
ソース /etc/locale.conf

もう一度文字エンコードを見てみましょう。エラーはなく、すべて正常です。

[root@35b0e9b16498 opt]# ロケール
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.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • 非ルートユーザーを使用してDockerコンテナでスクリプト操作を実行する
  • Dockerコンテナにホストディレクトリへの書き込み権限がない場合の解決策
  • DockerコンテナがSongtiなどのフォントを認識しない場合の解決策
  • Docker の win ping 失敗コンテナ回避ガイド
  • DockerコンテナでJupyterノートブックを設定する方法
  • Dockerはコンテナポートバインディングのローカルポートを実装します
  • docker run後にコンテナがExited (0)と表示される問題を解決する
  • Dockerはコンテナに入るためにルートを使用する

<<:  私が遭遇したIE8の互換性に関する注意事項

>>:  rem をモバイル デバイスに適応させる方法の例

推薦する

DockerにRedisをインストールし、パスワードを設定して接続する方法

Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...

MySQL データベースは SQL ステートメントを知っている必要があります (拡張バージョン)

拡張版です。質問とSQL文は以下の通りです。ユーザー テーブルを作成し、id、name、gender...

Linux におけるシステム入出力管理の詳細な説明

システムの入力と出力の管理1. システムの入力と出力を理解するLinuxシステムでは、1は正しい出力...

ElementUI コンポーネント el-dropdown (落とし穴)

選択して変更: クリックすると現在の値が表示され、ページ UI が表示され、CSS スタイルが変更さ...

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

目次MySql8.0 トランザクション分離レベルエラーの表示質問コマンドは次のように変更されますMy...

JavaScript が Jingdong の虫眼鏡の特殊効果を模倣

この記事では、Jingdong虫眼鏡を模倣したJavaScriptの具体的なコードを参考までに共有し...

MySQL が InnoDB テーブルが独立したテーブルスペースか共有テーブルスペースかを判断する方法の詳細な説明

序文InnoDB はデータをテーブルスペースに保存します。デフォルト設定では、初期サイズが 10 M...

Centos7 への mysql8.0rpm のインストール チュートリアル

まず、図をダウンロードしてください 1. まず、centos7に付属しているmariadbをアンイン...

ブラウザの自動フォーム入力によるウェブページのスタイル損失の原因の分析と解決

バックエンドからフロントエンドまで、なんと悲劇なのでしょう。他の人の CSS を自分の jsp We...

DockerはRedisを起動し、パスワードを設定します

RedisはRedisバージョン5のapline(Alps)イメージを使用します。これは小さくて高速...

jsプロキシの原理の詳細な説明

目次プロキシモードとは何ですか?実例を紹介例を使ってプロキシモデルの定義を理解するプロキシとはget...

CentOS システムの rpm インストールと Nginx の設定

目次CentOS rpm のインストールと Nginx の設定導入rpm パッケージのインストールサ...

IE8 ベータ 1 には注意が必要な 2 つの領域があります

<br />関連記事: Web スキル: 複数の IE バージョンを共存させるソリューシ...

Vue で Excel ストリーム ファイルをダウンロードし、ダウンロード ファイル名を設定する方法

目次概要1. URL経由でダウンロード2. aタグのダウンロード属性とblobコンストラクタを組み合...

ファイル書き込みを使用して Linux アプリケーションをデバッグする方法

Linux ではすべてがファイルなので、Android システム自体は Linux + Java だ...