网站url外文乱码造成的404错误

海外推广而言网站url乱码这是个很经常发生的事儿,特别是海外服务器不支持中文和其它小语种。虽然你用的utf-8,依然显示的是iso-8859-1.这次很意外。

最新更新

这个问题出现了几次,一直没时间解决先记录下来好了。感觉所有地方编码正常但是网站还是莫名其妙的有404错误和地址目录乱码?因为在更新网站时大部分用的是zip、tar等压缩包形式,而系统解压程序并不是utf-8编码,所以在最后一个环节出错。最笨的方式是将是所有涉及到编码问题的文件如图片等用ftp直接上传,ftp注意编码问题。

网站url乱码现象

错误现象信息约丰富越能通过交叉分析快速找到问题和方法。本次用HTTrack Website Copier复制的是西语静态网站,倒霉在完全不懂西语,以至于微小差别没有及时发现。就当练习下linux服务器Nginx环境下处理乱码了。
查看网站编码
用firefox查看到网站编码是iso-5559-1,虽然我用的是<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />。很显然是服务器无法读取网页代码而使用了服务器默认的编码。
于是ssh服务器用ls查看了下网页文件,西语无法显示是乱码,服务器无法识别西语。
服务器显示乱码
然后env|grep LANG下服务器的编码,显示LANG=en_US.UTF-8。看来Nginx环境网站编码没有问题只是语言包缺失导致文件名无法正常显示。
问题到此很清楚了:

  1. 服务器缺失西语语言包,所以无法显示
  2. 用winscp可以正常显示文件名,说明utf-8的网页编码设置正常
  3. 直接访问html网页文件无法显示(这个其实是个假象)
  4. 能够访问的网页head编码显示的是UTF-8,所有打不开的404错误网页显示iso-8859-1编码

解决西语url地址链接乱码问题

第3个问题是个误导或者失误导致了很长时间的误判。按理说服务器端和网页端UTF-8设置正确是可以直接访问html网站的,为什么还是404错误呢?
而中文却可以直接识别?于是我将winscp的上传编码utf-8从auto改为了on,强制打开。
winscp的utf编码设置
发现了一个吐血的现象——部分字符错误——西语的a没有正确上传而转义成其它字符了,简单说就是在上传过程中,因为编码没有自动识别而导致了文件名的改变,文件名变了自然是404错误了。
西语乱码造成的404错误 西语乱码造成的404错误02
重新更新了文件名,所有网页正常打开。
海外推广不仅仅是个技术活还要10倍的细心和完整的推理逻辑,不然经常累到脑儿瓜疼。

发表评论

*
*