gbk

php接收GET方法传入的中文参数乱码问题

六月ゝ 毕业季﹏ 提交于 2019-12-04 22:11:16
最近做PHP的webService服务器,发现用Get方法获取参数时获取到的参数时乱码。一番折腾后发现时浏览器本地语言的问题。 首先先来看下简单的测试代码: <? php header( "Content-Type:text/html;charset=UTF-8" ); $name = $_ GET ['name']; var_dump( $name ); ?> 测试结果如下: 代码中声明了响应内容的编码为utf-8,显示的内容确实乱码。在这里请注意var_dump出变量的长度只有4 ,很显然,两个中文字的长度在utf-8编码下肯定不止4个字节,然后我们再看一下Firefox的访问这个页面url FireFox会自动将中文url编码,所以我们可以看到测试变成了%B2%E2%CA%D4,很明显,这里一个字是两个字节,是gb2313、gbk等中文编码格式,而不是utf-8编码。如果我们把页面的编码切换为gbk,中文参数就会显示正常,参见下图 接下来我们做另外一个测试,代码如下: <?php header( "Content-Type:text/html;charset=UTF-8" ); $name = $_ GET ['name']; var_dump( $name ); ?> <form method= " GET " > <input name= "name" /> <input

Java 正确的做字符串编码转换

孤者浪人 提交于 2019-12-04 21:06:40
字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码文件是GBK编码, 操作系统(windows)默认的环境编码为GBK,那么编译时, JVM将 按照GBK编码将字节数组解析成字符,然后将字符转换为unicode格式的字节数组,作为内部存储。 当打印这个字符串时,JVM 根据操作系统本地的语言环境,将unicode转换为GBK,然后操作系统将GBK格式的内容显示出来。 当源码文件是UTF-8, 我们需要通知编译器源码的格式,javac -encoding utf-8 ... , 编译时,JVM按照utf-8 解析成字符,然后转换为unicode格式的字节数组, 那么不论源码文件是什么格式,同样的字符串,最后得到的unicode字节数组是完全一致的,显示的时候,也是转成GBK来显示(跟OS环境有关) 乱码如何产生? 本质上都是由于 字符串原本的编码格式 与 读取时解析用的编码格式不一致导致的。 例如: String s = "你好哦!"; System.out.println( new String(s.getBytes(),"UTF-8")); //错误,因为getBytes()默认使用GBK编码, 而解析时使用UTF-8编码,肯定出错。 其中 getBytes() 是将unicode

关于乱码问题的一些思考

依然范特西╮ 提交于 2019-12-04 15:41:42
前言 从长沙辞职跑到深圳,找房子找工作适应新的工作环境超级忙。之前一直没时间好好写博客,今天难得有空就上来写点东西吧! 都9102年了,没想到还能有那么多乱码问题。之前的工作基本上前后端统一编码就完事了;话不多说,既然遇到了就干脆搞搞明白吧! 编码解码概述 我们都知道计算机不能直接存储字母,数字,图片,符号等,计算机能处理和工作的唯一单位是"比特位(bit)",一个比特位通常只有 0 和 1。利用比特位序列来代表字母,数字,图片,符号等,我们就需要一个存储规则,不同的比特序列代表不同的字符,这就是所谓的"编码"。反之,将存储在计算机中的比特位序列(或者叫二进制序列)解析显示出来成对应的字母,数字,图片和符号,称为"解码",如同密码学中的加密和解密,下面将详细解释编码解码过程中涉及到的一些术语: 字符集合 (Character set):是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等,简单理解就是一个字库,与计算机以及编码无关。 字符编码集 (Coded character set):是一组字符对应的编码(即数字),为字符集合中的每一个字符给予一个数字,如 Unicode 为每一个字符分配一个唯一的码点与之一一对应。 字符编码 (Character Encoding):简单理解就是一个映射关系,将字符集对应的码点映射为一个个二进制序列,从而使得计算机可以存储和处理

Python2和3字符编码的区别

只谈情不闲聊 提交于 2019-12-04 15:29:55
Python2和3字符编码的区别 一、字符编码应用之Python 1.1 执行Python程序的三个阶段 Python test.py (我再强调一遍,执行test.py的第一步,一定是先将文件内容从硬盘读入到内存中) test.py文件内容以gbk格式保存的,内容为: 阶段一:启动Python解释器 阶段二:Python解释器此时就是一个文本编辑器,负责打开文件test.py,即从硬盘中读取test.py的内容到内存中 此时,Python解释器会读取test.py的第一行内容, #coding:utf-8 或 #-*-coding:utf-8-*- ,以此决定以什么编码格式将代码读入内存,这一行就是设定Python解释器这个软件使用的编码格式。 可以用sys.getdefaultencoding()查看,如果不在Python文件指定头信息 #-*-coding:utf-8-*- ,那就使用Python默认的编码格式。 import sys sys.getdefaultencoding() 'utf-8' Python2中默认使用ascii,Python3中默认使用utf-8。 改正:在test.py指定文件头,字符编码一定要为gbk。即更正为 #coding:gbk 你好啊 阶段三:读取已经加载到内存的代码(Unicode编码格式),然后执行,执行过程中可能会开辟新的内存空间

解决Ubuntu中文显示为乱码

一世执手 提交于 2019-12-04 13:03:46
博客新址: http://blog.xuezhisd.top 邮箱:xuezhisd@126.com 1. 安装所需软件 sudo apt-get install zh-autoconvert sudo apt-get install zhcon 2. 配置系统 $ vi /var/lib/locales/supported.d/local 加入 zh_CN.GBK GBK zh_CN.GB2312 GB2312 $ sudo locale-gen 3. 修改ubuntu的字符集 方法一: 修改用户目录下的.profile或.bashrc文件,增加以下内容: LANGUAGE=”zh_CN:zh:en_US:en” LANG=zh_CN.GBK 重新登录即可。 这个方法只对该用户有效。 方法二:修改/etc/environment,增加以下内容: LANGUAGE=”zh_CN:zh:en_US:en” LANG=zh_CN.GBK 然后重启X即可 这个方法对没有设置LANG及LANGUAGE环境变量的用户有效 参考: http://blog.csdn.net/zjc156m/article/details/9095297 http://blog.csdn.net/xieyan0811/article/details/7530962 http://www.linuxidc.com

TOMCAT运行乱码

孤街浪徒 提交于 2019-12-04 11:09:24
一、先来看看这张图,在tomcat 的启动窗口打印的内容包含了大量的中文乱码,虽然这些对 tomcat 本身的使用没有任何影响,但是却非常碍眼,影响视觉效果! 二、要修复这个问题,本质原因就一个:字节码节流为字符串时,使用了错误的字符集(和编码所用的字符集不一致)! 三、 找到 D:\apache-tomcat-8.5.47\conf 下的 logging.properties 文件 四、 找到 java.util.logging.ConsoleHandler.encoding = UTF-8 修改为 java.util.logging.ConsoleHandler.encoding = GBK 保存后,重启 tomcat ! 五、若是修改完还是乱码,修改目录下的 server.xml ,将 UTF-8 修改为 GBK 六、保存后,重启 tomcat ! 来源: https://www.cnblogs.com/strawbrry/p/11856770.html

编码的转换

旧时模样 提交于 2019-12-04 09:41:49
编码转换是指将一种编码转成另外一种编码,比如 utf-8 to gbk。 为何需要编码转换呢? 因为不同操作系统编码不同, utf-8在win上没办法直接看,因为windows是GBK编码的,得转成gbk。 反过来如果你的GBK字符相在Linux\Mac上正常显示,就得转成utf-8编码。 编码与解码 s.encode("utf-8") #以utf-8编码成2进制 s.decode("utf-8") #以utf-8解码成unicode str 1 s = "你好未来" 2 3 s_utf8 = s.encode("utf-8") 4 5 s_utf8.decode("utf-8") #如果括号内不写的话系统会默认用py3里面的Utf-8 编码转换 把文字从一种编码转化成另外一种,例如从utf-8转为gbk gbk------》 unicode 》utf-8 unicode:万国码,跟所有的编码之间都有映射关系 1 原本这个 win_data.txt文件是gbk编码的,现在转换为utf-8编码 2 3 f = open("win_data.txt","rb") 4 5 s = f.read() 6 7 f.close() 8 9 s_unicode = s.decode("gbk") #把gbk解码成为unicode,转为unicode 10 11 s_utf8 = s

UnicodeDecodeError: 'utf-8' codec can't decode byte..问题

落爺英雄遲暮 提交于 2019-12-04 04:05:01
解决UnicodeDecodeError: 'utf-8' codec can't decode byte..问题 问题描述: 问题分析: 该情况是由于出现了无法进行转换的 二进制数据 造成的,可以写一个小的脚本来判断下,是整体的字符集参数选择上出现了问题,还是出现了部分的无法转换的二进制块: 问题解决 法一: 将gbk编码数据decode('gbk')得到utf8编码的数据 法二:修改字符集参数,一般这种情况出现得较多是在国标码(GBK)和utf8之间选择出现了问题。 ​ 出现异常报错是由于设置了decode()方法的第二个参数errors为严格(strict)形式造成的,因为默认就是这个参数,将其更改为ignore等即可。例如: line.decode("utf8","ignore") 法三:在网上搜了很多人的处理方法是在程序的顶部加 import sysreload( sys )sys.setdefaultencoding('gbk') 可是我自己试一了,程序错是不报了,但是实际没有运行 最后,我在程度的顶部加了下面两行就好了,中文也可以正常显示了 # !/usr/bin/env Python # coding=utf-8 ​ 还有一种情况就是如果你用pyhton IO读取一个文件,那么要求将文件的编码方式转换成UTF-8。 来源: https://www.cnblogs

Python Unicode与中文处理(转)

浪子不回头ぞ 提交于 2019-12-03 20:32:46
Python Unicode与中文处理 python中的unicode是让人很困惑、比较难以理解的问题,本文力求彻底解决这些问题; 1.unicode、gbk、gb2312、utf-8的关系; http://www.pythonclub.org/python-basic/encode-detail 这篇文章写的比较好,utf-8是unicode的一种实现方式,unicode、gbk、gb2312是编码字符集; 2.python中的中文编码问题; 2.1 .py文件中的编码 Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用"编码指示"来修正。 一个module的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明: # -*- coding=utf-8 -*-或者 #coding=utf-8 其他的编码如:gbk、gb2312也可以; 否则会出现类似:SyntaxError: Non-ASCII character '\xe4' in file ChineseTest.py on line 1, but no encoding declared; see http://www.pytho for details这样的异常信息;n.org/peps/pep-0263