LINUX网络编程TCP服务器 客户端 有乱码怎么解决?

LINUX网络编程TCP服务器 客户端 有乱码怎么解决?,第1张

解决办法:

1在客户端n=read(socketfd,buff,1023);代码之前加上memset(buff,0,sizeof(buff));,这是保证收到较短数据(使用TCP你不能保证每次接收的数据和发送的数据时等长的),打印也是正确的;

2将客户端buff[n+1]+='\0';修改为buff[n]='\0';,这是因为n是下标,已经是最后一个位置了;

3将服务器端buff[n+1]+='\0';修改为buff[n]='\0';,这是因为n是下标,已经是最后一个位置了,而且和第2)一样,那个加号也要去掉,应该是笔误吧;

4最大的问题,将服务器端write(connectfd,buff,1023);,你怎么能够保证收到1023个字符呢也应该将while中条件移出作为WHILE中的一条语句,而且加上前面所述的memset语句,而将这里的write(connectfd,buff,1023);修改为write(connectfd,buff,strlen(buff))。

祝共同进步!

我们在虚拟机Linux终端中输入rz命令没有出现本地窗口,而是打印出waiting to receive和一串不明其意的字符。这是因为rz命令需要终端的支持(即rz命令是在客户端里面执行的),比如终端就是你用来连接远程服务器的客户端,像是 XShell、rxvt、putty、SecureCRT。

解决方法:

本地系统中安装Xshell,用Xshell连接虚拟机Linux,在Xshell中输入命令rz即可上传文件。

有时候linux服务器突然间查看日志都是中文乱码,原因很奇怪,有可能是:

不管什么原因吧,根本原因还是修改了linux系统本身的编码,改回来就完了。

修改全部配置文件

末尾增加两行

让其生效

如果你的web 服务器输出的日志都是乱码,那么最后一步:

出现这种情况的原因为两种操作系统的中文压缩方式不同,在windows环境中中文压缩一般为gbk,而在linux环境中为utf8,这就导致了在windows下能正常显示

txt文件在linux环境下打开呈现了乱码状态。

解决方法:在linux用iconv命令,输入命令如下

iconv

-f

gbk

-t

utf8

filepdf

>

filepdfutf8

此时会重生一fileutf8文件,打开之后就能正常显示中文

linux系统下修改语言配置方法有:

法一:修改/etc/profile文件,增加export

LANG=zh_CNGB18030

法二:修改/etc/sysconfig/i18n文件,将

#LANG="en_USUTF-8"

#SUPPORTED="en_USUTF-8:en_US:en"

#SYSFONT="latarcyrheb-sun16"

改为

LANG="zh_CNUTF-8"

SUPPORTED="zh_CN:zh:en_USUTF-8:en_US:en:zh_CNGB18030"

SYSFONT="latarcyrheb-sun16"

/etc/profile:

为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行

/etc/sysconfig/i18n

这里存放的是系统的区域语言设置

LANG

表明你当前系统的语言环境变量设置

,这里是

zh_CNGB18030

SUPPORTED

表明系统预置了那些语言支持

,不在项目中的语言不能正常显示

SYSFONT

定义控制台终端字体,你文本登录的时候显示的字体是

latarcyrheb-sun16

I18N

internationalization

的缩写形式,意即在

i

n

之间有

18

个字母,本意是指软件的“国际化”I18N支持多种语言,不过同一时间只能是英文和一种选定的语言,例如英文+中文、英文+德文、英文+韩文等等;

如果在SCRT上操作时中文乱码,可依次点击options--session

options--appearance,选择character

encoding为UTF-8

Linux中文显示不正常大多是终端字符集设置的不对,因为终端屏幕显示信息是以设置的语言来显示的,如果语言是英文或者其他编码语言设置,显示中文时就是乱码。设置终端字符集需要设置LANG这个环境变量,设置方法是在终端输入LANG=zh_CNUTF-8,设置好LANG变量后,再在终端上用ls命令查看一下带有中文的文件名应该就有效果了。

如果经过上面的设置后,用ls命令可以正常列出中文文件名了,那就最好将LANG=zh_CNUTF-8这一行添加到~/bashrc这个配置文件中,然后执行命令:source ~/bashrc,使配置文件的设置马上生效,这样终端就被完美的设置成UTF-8中文编码了。

背景如果Ubuntu Server在安装过程中,选择的是中文(很多新手都会在安装时选择中文,便于上手),这样在完成安装后,系统默认的语言将会是中文zh_CNUTF- 8。但问题是我们安装的是服务器,只需要运行命令行终端,但在终端下无法正常的显示默认中文编码zh_CNUTF-8。由此有以下方法解决

使用SecureCRT客户端软件

  直接修改虚拟终端界面配置项目中的字体编码为UTF-8即可。修改方法如下:

选项->会话选项->外观->字符编码->uft-8

修改以后显示中文如下图所示:

  原理其实很简单,Ubuntu Server默认的还是zh_CNUTF-8汉字编码,在服务器终端上面还是无法识别汉字,但是在虚拟终端中,经过“编码修正”以后就能够正确显示出来。相当于服务器终端将内容传递给客户端软件,客户端软件通过相应的编码方式进行解码显示中文。因为SecureCRT是安装在中文windows环境下的,而这个环境下的默认编码是GBK,可以识别汉字。那么如何解决服务器端中文乱码的问题呢,其实最好的方法就是干脆将语言环境设置成英文好了。

修改Ubuntu的配置文件/etc/default/locale

将原来的配置内容

LANG="zh_CNUTF-8"

LANGUAGE="zh_CN:zh"

修改为

LANG="en_USUTF-8"

LANGUAGE="en_US:en"

再在终端下运行:

$ locale-gen -en_US:en

注销或重启后,Ubuntu Server真正服务器实体终端就恢复成了英文的语言环境。所以,此方法不是真正意义上的中文化,而是恢复英文的默认编码

修改完以后,再次查询ip地址,可以发现就是英文环境了。

  1、查看是否安装中文语言包

 #locale -a |grep zh_CN

 没有输出,则未安装,可先安装

 安装完成,查看安装的语言包

 #locale -a |grep zh_CN

 zh_CN

 zh_CNgb18030

 zh_CNgb2312

 zh_CNgbk

 zh_CNutf8

 2、修改配置文件

 #vim /etc/localeconf

 修改:

 LANG=zh_CN(可以一一替换已安装的中文包尝试)

 重启电脑生效

客户端连接Linux服务器中文显示乱码,如下图所示:

字符乱码问题 :如果服务器本身支持中文,只是客户端显示乱码,通常就是

客户端字符集与服务器字符集不一致造成的。把客户端字符集改成服务器字符集就可以解决的。但是像 SSHSecureShellClient-329exe 客户端没有设置字符集的地方,就需要把字符集改为zh_CNGB18030才能正确显示中文:

export LC_CTYPE=zh_CNGB18030

export LC_ALL=zh_CNGB18030

export LANG=zh_CNGB18030

设置完就解决了客户端连接Linux系统中文显示乱码的问题。

注:每次使用客户端连接Linux服务器时,都需要手动改一下字符集。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » LINUX网络编程TCP服务器 客户端 有乱码怎么解决?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情