ホームページ 運用・保守 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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Android TV Box が非公式の Ubuntu 24.04 アップグレードを取得 Android TV Box が非公式の Ubuntu 24.04 アップグレードを取得 Sep 05, 2024 am 06:33 AM

多くのユーザーにとって、Android TV ボックスをハッキングするのは気が遠くなるように思えます。しかし、開発者の Murray R. Van Luyn は、Broadcom チップが不足する中、Raspberry Pi に代わる適切な代替品を探すという課題に直面しました。アルムビアとの共同作業

Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Deepseek Webバージョンの入り口Deepseek公式ウェブサイトの入り口 Feb 19, 2025 pm 04:54 PM

DeepSeekは、Webバージョンと公式Webサイトの2つのアクセス方法を提供する強力なインテリジェント検索および分析ツールです。 Webバージョンは便利で効率的であり、公式ウェブサイトは包括的な製品情報、ダウンロードリソース、サポートサービスを提供できます。個人であろうと企業ユーザーであろうと、DeepSeekを通じて大規模なデータを簡単に取得および分析して、仕事の効率を向上させ、意思決定を支援し、イノベーションを促進することができます。

DeepSeekをインストールする方法 DeepSeekをインストールする方法 Feb 19, 2025 pm 05:48 PM

DeepSeekをインストールするには、Dockerコンテナ(最も便利な場合は、互換性について心配する必要はありません)を使用して、事前コンパイルパッケージ(Windowsユーザー向け)を使用してソースからコンパイル(経験豊富な開発者向け)を含む多くの方法があります。公式文書は慎重に文書化され、不必要なトラブルを避けるために完全に準備します。

BitPie Bitpie ウォレット アプリのダウンロード アドレス BitPie Bitpie ウォレット アプリのダウンロード アドレス Sep 10, 2024 pm 12:10 PM

BitPie Bitpie ウォレット アプリをダウンロードするにはどうすればよいですか?手順は次のとおりです。 AppStore (Apple デバイス) または Google Play ストア (Android デバイス) で「BitPie Bitpie Wallet」を検索します。 「入手」または「インストール」ボタンをクリックしてアプリをダウンロードします。コンピューター版の場合は、BitPie ウォレットの公式 Web サイトにアクセスし、対応するソフトウェア パッケージをダウンロードしてください。

Bitget公式ウェブサイトのインストール(2025初心者ガイド) Bitget公式ウェブサイトのインストール(2025初心者ガイド) Feb 21, 2025 pm 08:42 PM

Bitgetは、スポット取引、契約取引、デリバティブなど、さまざまな取引サービスを提供する暗号通貨交換です。 2018年に設立されたこのExchangeは、シンガポールに本社を置き、安全で信頼性の高い取引プラットフォームをユーザーに提供することに取り組んでいます。 Bitgetは、BTC/USDT、ETH/USDT、XRP/USDTなど、さまざまな取引ペアを提供しています。さらに、この取引所はセキュリティと流動性について評判があり、プレミアム注文タイプ、レバレッジド取引、24時間年中無休のカスタマーサポートなど、さまざまな機能を提供します。

Zabbix 3.4 ソースコードコンパイルのインストール Zabbix 3.4 ソースコードコンパイルのインストール Sep 04, 2024 am 07:32 AM

1. インストール環境 (Hyper-V 仮想マシン): $hostnamectlStatichostname:localhost.localdomainIconname:computer-vmChassis:vmMachineID:renwoles1d8743989a40cb81db696400BootID:renwoles272f4aa59935dcdd0d456501Virtualization:microsoftOperatingSystem:CentOS Linux7(Core)CPEOSName: CP:

OUYI OKXインストールパッケージが直接含まれています OUYI OKXインストールパッケージが直接含まれています Feb 21, 2025 pm 08:00 PM

世界をリードするデジタル資産交換であるOuyi Okxは、安全で便利な取引体験を提供するために、公式のインストールパッケージを開始しました。 OUYIのOKXインストールパッケージは、ブラウザに直接インストールでき、ユーザー向けの安定した効率的な取引プラットフォームを作成できます。インストールプロセスは、簡単で理解しやすいです。

gate.ioインストールパッケージを無料で入手してください gate.ioインストールパッケージを無料で入手してください Feb 21, 2025 pm 08:21 PM

Gate.ioは、インストールパッケージをダウンロードしてデバイスにインストールすることで使用できる人気のある暗号通貨交換です。インストールパッケージを取得する手順は次のとおりです。Gate.ioの公式Webサイトにアクセスし、「ダウンロード」をクリックし、対応するオペレーティングシステム(Windows、Mac、またはLinux)を選択し、インストールパッケージをコンピューターにダウンロードします。スムーズなインストールを確保するために、インストール中に一時的にウイルス対策ソフトウェアまたはファイアウォールを一時的に無効にすることをお勧めします。完了後、ユーザーはGATE.IOアカウントを作成して使用を開始する必要があります。

See all articles