zipに奇妙な文字を含むファイルを正しく解凍する方法は?

zipに奇妙な文字を含むファイルを正しく解凍する方法は?

私はLinuxverseに初めて触れたので、標準的な質問をするのか理解してください。

次のリンクを使用してzipファイルをダウンロードしました。https://io.genesis-ark.club/common/20240401/三国志名章の記録(2).zip

初めてダウンロードを使用したとき、wget "https://io.genesis-ark.club/common/20240401/三国名将录(2).zip"ダウンロードが完了した後にエラーが発生したため、単に再ダウンロードを使用しました。しかし、zipを抽出しようとすると、次のような奇妙な結果が表示されます。???????.zipwget "https://io.genesis-ark.club/common/20240401/三国名将录(2).zip" -O mydownload.zip

ここに画像の説明を入力してください。

だから、詳細を含むzipファイルを取得する方法を見つけようとしています。インターネット検索中に見つかりましたが、zipinfo mydownload.zip出力が私にも奇妙に見えます。

ここに画像の説明を入力してください。

非標準プログラム(rar、zip、7zなど)を使用した圧縮によって発生することがありますか?どうすれば解決できますか? 7zipを試してみましたunzip -aが、何も機能しませんでした。

注:私はCentos 7.0を使用しています。

コメントに基づく追加情報:

出力locale charmap

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
ANSI_X3.4-1968

出力locale

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

答え1

ロケールの文字エンコーディングは、米国式(ASCIIおよびANSI)英語ANSI_X3.4-1968と128の一意の文字のみを含む文字セットであるASCIIの別の名前です。A

中国ならではの感じは全くありません。

LC_CTYPE環境変数がに設定されていますが、CentOSシステムでは有効なロケール名ではないUTF-8ため、これらのロケールを取得します(サポートされているロケールのリストはのUTF-8出力を参照)。locale -aApple macos(以前のmacOS、OS / X、MacOS / X、またはAppleマーケティングチームでいつか呼び出されるのが好きな名前)は、例外として知られている少数のシステムで有効なロケールです。

ロケールカテゴリが次の場合をLC_CTYPEカバーします。文字エンコーディング何よりも見つからず、Cほとんどのシステム(CentOSを含む)のロケールがデフォルトで、charmapはASCIIです。

出力には環境変数がに設定されているとlocale表示されます。LANGen_US.UTF-8

これはシステムで有効なロケールです。このLC_CTYPEロケールは偽物なので、設定しないでください。したがって、このロケールには、派生した他のLC_*カテゴリ$LANGと同様にen_US.UTF-8UnicodeエンコーディングUTF-8文字マップがあります。既知のすべての既存の文字が含まれています。 。

次の手順を実行して、シェル環境でこの問題をローカルで解決できます。

unset -v LC_CTYPE

(POSIXに似たシェルを想定)

これにより、次の出力が表示されますlocale

LC_CTYPE="en_US.UTF-8"

(二重引用符は値ですミルダ$LANG(ここでは設定されていません$LC_ALL

問題をより恒久的に解決するには、その環境変数を設定するものを理解する必要があります。

ssh1つの可能性は、Macosシステムから対応するCentOSシステムにログインしており、Macosシステムの環境にはLC_CTYPE=UTF-8(機能的に)含まれており、ssh通常はローカライズされた変数をサーバー1に渡すように構成され、最終的にサーバー1に伝播されます。 CentOSシステムのリモートシェルセッション。

この場合、macosに変数の転送を停止するように指示するかLC_CTYPE、macosに限定されず、他のシステムに移植可能な値を送信する必要があります。たとえば、次のように追加できます。

SetEnv LC_CTYPE=en_US.UTF-8

~/.ssh/configこの変数の特定の値を送信します。 Macos以外のシステムに偽の環境変数の値を送信するのは明らかに面倒な$LC_CTYPEのでssh_config、これをAppleの問題として提起することもできます。 。

次のようにすることもできます。

env -u LC_CTYPE ssh centos-machine

変える:

ssh centos-machine

LC_CTYPE環境変数がリモートsshシェルに渡されていないことを確認してください。


¹ 通​​常、SendEnv LANG LC_*クライアントとAcceptEnv LANG LC_*サーバー側の一部の構成ガイドライン

関連情報