拨云见雾之 看透编码问题

                                                                                                看透编码问题

 


              我相信,这个问题是所有新手必然面临的困境

              尤其是刚刚接触Linux开发或者网络开发,这个是一个最普遍的问题之一

              一直以来,我也是云里雾里,碰到很多次问题,总是见招拆招,google了事,没有静下心思考一下,总结总结。

              正所谓“胸中有丘壑”,才能无敌于天下,所以务必要把这个问题想透



        为了把问题看的更充分,我看了很多资料,其中质量较高或者能引起思考的有以下几个:

       1.这篇文章比较全面讲了编码的演化和比较,很好。

            http://www.cnblogs.com/KevinYang/archive/2010/06/18/1760597.html

       2.这篇是一堆人讨论半天,关于解码和字符集理解的(讨论半天也没有讨论明白..)

            http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/f656ec85-2cd0-4d6a-a207-fe30523cc5a4/

       3. 这篇文章很细腻,不妨看看:

            http://blog.csdn.net/fancyaphy/article/details/619972

       4. 格式比较乱,但是内容还是有不少新意的:

            http://blog.chinaunix.net/uid-24245847-id-3228667.html

       5.以下这几个是讲python编码,还不错,贴过来。

           http://blog.csdn.net/five3/article/details/7030294

           http://www.cnblogs.com/mangu-uu/archive/2012/07/04/2575218.html

           http://blog.csdn.net/followingturing/article/details/8136973

    编码的前世今生,林林总总,我就不粘贴了,前面几个帖子已经说得比较清楚了,我主要归纳一下他们的中心思想

     


1.  区分字符集和编码

        一般来讲,制定字符的编码标准 = 字符集 + 编码

        字符集是某一种编码所有字符的集合,如GB2312(主要是简体汉字)  GBK( 额外加上繁体) GB18030 (额外加上少数民族文字等),全球最大且通用的字符集是Unicode字符集,它试图达到一种全球通用的局面,包含各种语言的字符。

      而编码可以理解为物理存储串到字符的一一对应关系。这就涉及到编码(encode)和解码(decode)的问题了。

        对应关系呢,GB2312,GBK,GB18030既有字符集的含义,又有字符编码的含义。

        Unicode呢,有UTF-8,UTF-16等编码方式。



2. 各个编码的整体架构如何呢?

            第一阶段:ascii   这个编码只为英文设计

            第二阶段:各个国家和地区自行制定编码:ANSI指当地编码,比如在大陆它指GB2312,在台湾它指GBK,日本,阿拉伯,很多很多,彼此各行其政。

            第三阶段:考虑全球通用:Unicode是一个通用字符集,在不同环境下可选择UTF-8/UTF-16/UTF-7;

                               (解决了最要命的问题:同一个文件里,不能共存两种编码的文本)



3.各种编码常见的使用环境是什么呢?

            1. 简体中文WIN操作系统,主要是ANSI,简体是GB2312,繁体是BIG5;

            2. Linux文件格式一般默认是UTF-8;



 4.字符集的包含关系如何呢?

             除去各种日语、汉语、阿拉伯语、豪萨语等等不谈,我们只看一下我们能够遇到的:

              gb2312 < gbk < gb18030 < unicode. (包含字符在topic1讲过)

             前三种,基本算是同一个体系中的,一般可以做到向后兼容。

             如果这个想明白,就可以想象:

                    小字符集转码到大字符集,是没问题的,每个字符都能找到对应的编码。

                    而大字符集转到小字符集,就可能出现乱码的情况,具体原因简单,不详。



5.浏览器或者编辑器或者终端看到乱码,是怎么回事呢?

               我看到论坛里很多人是这样的逻辑:unicode字符集大,我把浏览器调成unicode,应该可以兼容小字符集的gb2312的啊?

               此言差矣!

               要理解明白:字符集 和编码的区别。

               这种乱码问题,跟字符集大小无关,而是“解码器”的问题。browser收到了一个文件,如果是GBK格式的,而采用utf-8的方式解码,读到的就是满篇乱码。同样的物理存储,以不同的解码方式解码,可定会读出各种各样的数据了,当年上学时候学数据结构,应该记得:同样的物理数据,理解成二叉树和普通多叉树是完全可以的,解析方式不同,得到的完全不同的结果。

             所以在这个过程总,你要仔细分析:

            文本是什么编码的(最初编码方式)?用什么编码传输的(传输协议)?用什么编码读取的(编辑器、终端、浏览器等等)?



6.程序开发我们应该关注什么?

              1.  首先要明白这些编码的关系,以及他们通常环境中都用什么编码。

               2. 怎么查看编码?怎么转换编码?(关注开发接口)

               3. 遇到乱码问题,应该从哪些角度分析?(默认编码/字符集大小等)



7.编码长度问题

              gbk,gb2312是采用双字节;

              UTF-8是变长编码,英文是单字节,汉字是三字节;

              综上,如果文本中大量汉字,gb系列更省空间;如果英文多或者纯英文,自认unicode更佳。



8.编码问题的场景

              编码是为了兼容字符集之间的通用性,通常可以编码的地方有:
          1、操作系统默认编码  
          2、程序运行环境的编码  如:终端等
          3、源码文件自身的编码 , 这是文件的一个属性

          4、程序中的字符串编码 , 这是程序中处理数据的编码。注意和情形3进行区分。

           具体来说,就有很多经典场景了,比如 编辑器读写文件的编码,终端显示的编码,数据传输的编码,HTTP协议中关于网页编码的设置,网页中charset的设置,汉字的打印等等。



9.解决编码问题的常用手段

           1. 编码检测。通常需要采用一种自动化的方法检测编码,可以利用一些库或者自己分析html头等等。    
           2. 编码转化 中文问题,通常的情况都是UTF-8 和GB系列之间的转码。有两个情形:

               1)编码A 直接转码到 编码B ,典型是php。

               2)存在中间编码,需要先转化成中间编码,然后再转成需要的编码。典型是python。decode & encode





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 支持向量机非线性回归通用MATLAB程序解析 #### 一、概述 本文将详细介绍一个基于MATLAB的支持向量机(SVM)非线性回归的通用程序。该程序采用支持向量机方法来实现数据的非线性回归,并通过不同的核函数设置来适应不同类型的数据分布。此外,该程序还提供了数据预处理的方法,使得用户能够更加方便地应用此程序解决实际问题。 #### 二、核心功能与原理 ##### 1. 支持向量机(SVM) 支持向量机是一种监督学习模型,主要用于分类和回归分析。对于非线性回归任务,SVM通过引入核技巧(kernel trick)将原始低维空间中的非线性问题转换为高维空间中的线性问题,从而实现有效的非线性建模。 ##### 2. 核函数 核函数的选择直接影响到模型的性能。本程序内置了三种常用的核函数: - **线性核函数**:`K(x, y) = x'y` - **多项式核函数**:`K(x, y) = (x'y + 1)^d` - **径向基函数(RBF)**:`K(x, y) = exp(-γ|x - y|^2)` 其中RBF核函数被广泛应用于非线性问题中,因为它可以处理非常复杂的非线性关系。本程序默认使用的是RBF核函数,参数`D`用于控制高斯核函数的宽度。 ##### 3. 数据预处理 虽然程序本身没有直接涉及数据预处理的过程,但在实际应用中,对数据进行适当的预处理是非常重要的。常见的预处理步骤包括归一化、缺失值处理等。 ##### 4. 模型参数 - **Epsilon**: ε-insensitive loss function的ε值,控制回归带宽。 - **C**: 松弛变量的惩罚系数,控制模型复杂度与过拟合的风险之间的平衡。 #### 三、程序实现细节 ##### 1. 函数输入与输出 - **输入**: - `X`: 输入特征矩阵,维度为(n, l),其中n是特征数量,l是样本数量。 - `Y`: 目标值向量,长度为l。 - `Epsilon`: 回归带宽。 - `C`: 松弛变量的惩罚系数。 - `D`: RBF核函数的参数。 - **输出**: - `Alpha1`: 的拉格朗日乘子向量。 - `Alpha2`: 负的拉格朗日乘子向量。 - `Alpha`: 拉格朗日乘子向量。 - `Flag`: 标记向量,表示每个样本的类型。 - `B`: 偏置项。 ##### 2. 核心代码解析 程序首先计算所有样本间的核矩阵`K`,然后构建二次规划问题并求解得到拉格朗日乘子向量。根据拉格朗日乘子的值确定支持向量,并计算偏置项`B`。 - **核矩阵计算**:采用RBF核函数,通过`exp(-(sum((xi-xj).^2)/D))`计算任意两个样本之间的相似度。 - **二次规划**:构建目标函数和约束条件,使用`quadprog`函数求解最小化问题。 - **支持向量识别**:根据拉格朗日乘子的大小判断每个样本是否为支持向量,并据此计算偏置项`B`。 #### 四、程序扩展与优化 - **多核函数支持**:可以通过增加更多的核函数选项,提高程序的灵活性。 - **自动调参**:实现参数自动选择的功能,例如通过交叉验证选择最优的`Epsilon`和`C`值。 - **并行计算**:利用MATLAB的并行计算工具箱加速计算过程,特别是当样本量很大时。 #### 五、应用场景 该程序适用于需要进行非线性回归预测的场景,如经济预测、天气预报等领域。通过调整核函数和参数,可以有效应对各种类型的非线性问题。 ### 总结 本程序提供了一个支持向量机非线性回归的完整实现框架,通过灵活的核函数设置和参数调整,能够有效地处理非线性问题。对于需要进行回归预测的应用场景,这是一个非常实用且强大的工具。
项目:JavaScript 中的 Canyon Runner 游戏 Canyon Runner Game 是一个 HTML5 和 JavaScript 项目。这款游戏看起来很棒,玩起来很有趣。这款游戏使用了 Phaser框架。如果你想编写一个简单的游戏,那么这款射击游戏就是你必玩的游戏。这款游戏包含大量 JavaScript,用于对游戏的某些部分进行验证。 游戏玩法 要运行此游戏,您不需要任何类型的本地服务器,但需要 浏览器。您可以使用 Google Chrome 或 Mozilla Firefox 获得更好、更优化的游戏体验。要先玩游戏,请在浏览 器中单击 index.html 文件打开游戏。打开后,将出现一个带有开始菜单选项的屏幕。游戏的控制是箭头键和空格键,用于射击障碍物。游戏有一个主要的太空敌人和一个健康强化。具有惊人的视差效果、复古声音等。 这款游戏的射击是自动的。当你开始游戏时,射手开始发射火箭。记住这是一款两级或两章的游戏。第一级处理障碍和障碍。你需要越过这些障碍,不要让它们碰到你。即使它们碰到你,你也可以通过吃健康能量来恢复你的健康。你可以跑得更快,也可以控制你的宇宙飞船速度。 当你通过第一关后,你将在第二章中面对主要敌人。他会不断向你发射火箭导弹。你必须躲避它们并保护自己。你可以用火箭导弹攻击敌人来杀死他们。如果你能杀死敌人,你就赢了游戏。 这款游戏玩起来很有趣,重制它更是有趣。所以希望你能给这款游戏添加一些额外的关卡。 要查看我们的项目,您可以查看下面的图像滑块。我们建议您使用 Google Chrome 以获得更好的游戏性能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值