Linux ソケットの文字化けコードの解決策: 1. ターミナル コマンド ウィンドウを開きます; 2. iconv コマンドを使用して Linux ファイルの文字セットを変換します。変換コマンドは「iconv -f utf-8 -t」などです。 gb2312 /server_test/reports/software_.txt > /server_test/reports/software_asserts.txt」。
#このチュートリアルの動作環境: 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=名称 输出编码
-c 从输出中忽略无效的字符 -o, --output=FILE 输出文件 -s, --silent 关闭警告 --verbose 打印进度信息
iconv -f utf-8 -t gb2312 /server_test/reports/software_.txt > /server_test/reports/software_asserts.txt
#include <iconv.h>
#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; }
Linux ビデオ チュートリアル 」
以上がLinuxソケットが文字化けした場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。