ホームページ 運用・保守 Linuxの運用と保守 Linuxソケットが文字化けした場合の対処方法

Linuxソケットが文字化けした場合の対処方法

Mar 16, 2023 am 09:26 AM
linux 文字化け

Linux ソケットの文字化けコードの解決策: 1. ターミナル コマンド ウィンドウを開きます; 2. iconv コマンドを使用して Linux ファイルの文字セットを変換します。変換コマンドは「iconv -f utf-8 -t」などです。 gb2312 /server_test/reports/software_.txt > /server_test/reports/software_asserts.txt」。

Linuxソケットが文字化けした場合の対処方法

#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。

Linux ソケットが文字化けしている場合はどうすればよいですか?

Linux、Windows、ソケットの文字化け問題

問題の説明:

Linux で自分が作成した FTP クライアントがあり、組み込みの FTP クライアントがあります。 Windows クライアント ソフトウェアで構築した FTP サーバーで、プログラムを使用してサーバー上に中国語を含むディレクトリまたは中国語を含むファイル名を作成すると、中国語名が文字化けします

問題分析:

エンコードの問題が原因であることは間違いありませんが、どのエンコードにすべきかを確認するにはどうすればよいでしょうか? Baidu は後に、ubuntu はデフォルトで utf-8 を使用し、Windows はデフォルトで gbk を使用することを発見しました。そのため、中国語のパスを含むコンテンツが送信されるときに必ず gbk に変換されるようにしてください。

解決策:

utf8 と gbk の間の変換:

Linux ファイル文字セット変換 (utf8-gb2312)

1、コマンド ライン

LINUX でエンコード変換を実行する場合、iconv コマンドを使用してこれを実現できます。これはファイル用であり、指定されたファイルをあるエンコードから別のエンコードに変換します。

iconv コマンドの使用方法は次のとおりです。

iconv [选项...] [文件...]
ログイン後にコピー
  • 入出力形式の指定:

  -f, --from-code=名称 原始文本编码
  -t, --to-code=名称 输出编码
ログイン後にコピー
  • # #List 既知のすべての文字セット -l, --list

  • 出力制御:

  •   -c   从输出中忽略无效的字符
      -o, --output=FILE   输出文件
      -s, --silent   关闭警告
      --verbose   打印进度信息
    ログイン後にコピー
例:

iconv -f utf-8 -t gb2312 /server_test/reports/software_.txt > /server_test/reports/software_asserts.txt
ログイン後にコピー

次の必須ライブラリ ファイル

2、関数アプリケーション

1.ヘッダー ファイル

#include <iconv.h>
ログイン後にコピー
の組み込みボード上の libiconv ライブラリをダウンロードしてください。

2. 関数

(1) iconv_t iconv_open(const char *tocode, const char *fromcode);

この関数は、どの 2 つのエンコーディングが変換されるかを説明します (tocode がターゲット エンコーディングです) 、fromcode は元のエンコーディングであり、この関数は次の 2 つの関数で使用する変換ハンドルを返します。

(2) size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *outbytesleft);

この関数は inbuf から文字を読み取り、変換します。 outbuf に出力し、inbytesleft は変換されなかった文字数を記録するために使用され、outbytesleft は出力バッファーの残りのスペースを記録するために使用されます。

(3) int iconv_close(iconv_t cd);

この関数は、変換ハンドルを閉じてリソースを解放するために使用されます。

3. 例: C 言語で実装された変換サンプル プログラム

#include "stdio.h"
#include "string.h"
#include "iconv.h"
#include "stdlib.h"
 
static  int  charset_convert( const  char  *from_charset,  const  char  *to_charset,
                            char  *in_buf,  size_t  in_left,  char  *out_buf,  size_t  out_left)
{
     iconv_t icd = (iconv_t)-1;
     size_t  sRet = -1;
     char  *pIn = in_buf;
     char  *pOut = out_buf;
     size_t  outLen = out_left;
 
     if  (NULL == from_charset || NULL == to_charset || NULL == in_buf || 0 >= in_left || NULL == out_buf || 0 >= out_left)
     {
         return  -1;
     }
 
     icd = iconv_open(to_charset, from_charset);
     if  ((iconv_t)-1 == icd)
     {
         return  -1;
     }
 
     sRet = iconv(icd, &pIn, &in_left, &pOut, &out_left);
     if  (( size_t )-1 == sRet)
     {
         iconv_close(icd);
         return  -1;
     }
 
     out_buf[outLen - out_left] = 0;
     iconv_close(icd);
     return  ( int )(outLen - out_left);
}
 
static  int  charset_convert_UTF8_TO_GB2312( char  *in_buf,  size_t  in_left,  char  *out_buf,  size_t  out_left)
{
     return  charset_convert( "UTF-8" ,  "GB2312" , in_buf, in_left, out_buf, out_left);
}
 
static  int  charset_convert_GB2312_TO_UTF8( char  *in_buf,  size_t  in_left,  char  *out_buf,  size_t  out_left)
{
     return  charset_convert( "GB2312-8" ,  "UTF-8" , in_buf, in_left, out_buf, out_left);
}
 
int  main()
{
     char  *pIn =  "hello 中国人" ;
     char  *pOut = NULL;
     size_t  outLen = 0;
     size_t  inLen = 0;
     int  iRet = -1;
 
     inLen =  strlen (pIn);
     outLen = inLen * 3;
     pOut = ( char  *) malloc ( sizeof ( char ) * outLen);
     if  (NULL == pOut)
     {
         return  -1;
     }
     memset (pOut, 0,  sizeof ( char ) * outLen);
 
     iRet = charset_convert_UTF8_TO_GB2312(pIn, ( size_t )inLen, pOut, ( size_t )inLen);
     if  (-1 == iRet)
     {
         return  -1;
     }
 
     printf ( "out = %s;\touLen = %d\n" , pOut, iRet);
     free (pOut);
     pOut = NULL;
     return  0;
}
ログイン後にコピー
この実装はクロスプラットフォームに対応でき、個人的にはその方が良いと思います~

ps: FTP以前作ったクライアントが Windows だったのですが、A が移植したいと言うので Windows に切り替えたところ、上記の問題が発生しました プロジェクトに登場した中国のソリューションと比較しましたが、少なくとも解決の経験は積んできました。問題 (中国語は使用できません。ピンインは使用できます)

関連する推奨事項: 「

Linux ビデオ チュートリアル

以上がLinuxソケットが文字化けした場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

VSCODEは拡張子をインストールできません VSCODEは拡張子をインストールできません Apr 15, 2025 pm 07:18 PM

VSコード拡張機能のインストールの理由は、ネットワークの不安定性、許可不足、システム互換性の問題、VSコードバージョンが古すぎる、ウイルス対策ソフトウェアまたはファイアウォール干渉です。ネットワーク接続、許可、ログファイル、およびコードの更新、セキュリティソフトウェアの無効化、およびコードまたはコンピューターの再起動を確認することにより、問題を徐々にトラブルシューティングと解決できます。

vscodeはMacに使用できますか vscodeはMacに使用できますか Apr 15, 2025 pm 07:36 PM

VSコードはMacで利用できます。強力な拡張機能、GIT統合、ターミナル、デバッガーがあり、豊富なセットアップオプションも提供しています。ただし、特に大規模なプロジェクトまたは非常に専門的な開発の場合、コードと機能的な制限がある場合があります。

vscodeとは何ですか?vscodeとは何ですか? vscodeとは何ですか?vscodeとは何ですか? Apr 15, 2025 pm 06:45 PM

VSコードは、Microsoftが開発した無料のオープンソースクロスプラットフォームコードエディターと開発環境であるフルネームVisual Studioコードです。幅広いプログラミング言語をサポートし、構文の強調表示、コード自動完了、コードスニペット、および開発効率を向上させるスマートプロンプトを提供します。リッチな拡張エコシステムを通じて、ユーザーは、デバッガー、コードフォーマットツール、GIT統合など、特定のニーズや言語に拡張機能を追加できます。 VSコードには、コードのバグをすばやく見つけて解決するのに役立つ直感的なデバッガーも含まれています。

Apr 16, 2025 pm 07:39 PM

NotePadはJavaコードを直接実行することはできませんが、他のツールを使用することで実現できます。コマンドラインコンパイラ(Javac)を使用してByteCodeファイル(filename.class)を生成します。 Javaインタープリター(Java)を使用して、バイトコードを解釈し、コードを実行し、結果を出力します。

Linuxの主な目的は何ですか? Linuxの主な目的は何ですか? Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

vscodeの使用方法 vscodeの使用方法 Apr 15, 2025 pm 11:21 PM

Visual Studio Code(VSCODE)は、Microsoftが開発したクロスプラットフォーム、オープンソース、および無料のコードエディターです。軽量、スケーラビリティ、および幅広いプログラミング言語のサポートで知られています。 VSCODEをインストールするには、公式Webサイトにアクセスして、インストーラーをダウンロードして実行してください。 VSCODEを使用する場合、新しいプロジェクトを作成し、コードを編集し、コードをデバッグし、プロジェクトをナビゲートし、VSCODEを展開し、設定を管理できます。 VSCODEは、Windows、MacOS、Linuxで利用でき、複数のプログラミング言語をサポートし、マーケットプレイスを通じてさまざまな拡張機能を提供します。その利点には、軽量、スケーラビリティ、広範な言語サポート、豊富な機能とバージョンが含まれます

VSCODE前の次のショートカットキー VSCODE前の次のショートカットキー Apr 15, 2025 pm 10:51 PM

VSコードワンステップ/次のステップショートカットキー使用法:ワンステップ(後方):Windows/Linux:Ctrl←; macOS:CMD←次のステップ(フォワード):Windows/Linux:Ctrl→; macOS:CMD→

See all articles