LINUX网络编程TCP服务器 客户端 有乱码怎么解决?
解决办法:
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服务器时,都需要手动改一下字符集。
0条评论