encoding=utf-30

问题描述:encoding=utf-8是什么意思? 这篇文章主要介绍了一个有趣的事情,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。

encoding=utf-8需要下载吗

encoding=utf-30的相关图片

8位Unicode转换格式(UTF-8)是一种用于编码各种字符的相对较新的代码约定。

它是字符标识的标准,也是各种编程语言和设备的参考,有助于标准化字母,数字和其他字符的显示。

在许多情况下,UTF-8取代了一种名为美国信息交换标准码(ASCII)的旧约定。

ASCII处理英语语言文本所需的所有字符,但UTF-8为不使用英语或罗马字母的其他语言处理更多不同的符号集。UTF-8被认为是与ASCII向后兼容的。

myeclipse从mysql里读取数据时乱码的相关图片

myeclipse从mysql里读取数据时乱码

根据多次在ie6、ie7上测试发现用Encoding.Default的基本可以解决95%的乱码输出的问题,虽然网上有帖子说“谨慎使用Encoding.Default”,原帖见备注一。

但是另外的5%的乱码需要Encoding.GetEncoding("utf-8")才能解决,至于Encoding.GetEncoding("GB2312")没测试,因为尚未发现Encoding.GetEncoding("utf-8")和Encoding.Default都无法解决的境况。UTF-8和GB2312的区别在备注二中。

这样的话,治本的方法就是上传或下载导出文件时,分析上传文件字节流需要知道它的编码,不过C#目前还没有现成的函数能够获取,具体的方法可以参见备注三。

但是治本的方法也有缺点,1.对服务器的处理需求增大 2.修要修改的工作量增加。我这有个治标的办法,就是让user选择编码。虽然我极力不想这么做,但是没办法,学费还是要交的,下一版的时候注意。

备注四中有Encoding.Default的讲解。

备注一:from http://hi.baidu.com/irinihp/blog/item/d196cd35b4e7cb83a61e12aa.html。

谨慎使用Encoding.Default。

2009-03-30 15:36。

在处理文本时,经常需要处理Encoding的概念。存在这个问题的原因在于,在.NET程序内文本只是string和char对象,而保存到硬盘时,或者准备用socket把它发送出去时,都得先转换成byte[]或者字节流。而转换的算法,就是Encoding。

老外的程序里面,都喜欢用Encoding.ASCII,这是因为他们主要只使用western字符;于是我们经常要在他们的代码把Encoding.ASCII替换成Encoding.Default才能使用。

所谓Encoding.Default,是指当前系统设置的“默认字符集编码方式”。你可以通过控制面板里面的区域选项设置它(这是在我的机器上的设定):

查看图片

注意红色方框内的部分,“为你的非Unicode程序选择一个语言来匹配其本地语言版本”。这里选择了Chinese (PRC),则Encoding.Default等效于Encoding.GetEncoding("gb2312")。gb2312在代码页936,所以所有以双字节编码(ANSI编码)字符的程序在这个系统上会使用936代码页,使用Unicode的不受影响。

你可以看到 Encoding.Default的值是和系统设定相关的。这样,有些时候会出问题:一台机器用socket发送一段文本到另一台机器,两边都设定编码方式为Encoding.Default,但两台机器的区域选项的这个设置是不一样的,却没有被注意;如果发送的是非western字符,则接受方必然会得到乱码。这种问题往往会令人很困惑。

所以在面对中文且为ANSI编码的情况下,最好不要用Encoding.Default,而用 Encoding.GetEncoding("gb2312"),或者更直接的Encoding.GetEncoding(936);而如果有可能的话,最好全部使用unicode,比如utf-8,也就是Encoding.UTF8。有了unicode之后,其实我们不需要代码页的概念。

备注二:http://blog.csdn.net/forsiny/archive/2009/11/15/4813107.aspx。

C#文本文件编码问题,区别UTF-8和GB2312 收藏。

最近用C#涉及到一些读取 txt文本文件的操作,但是一个编码问题就困惑了我好久。如果编码选的不对,会造成乱码。之前转载的一片文章提出了一种解决方法,就是用new StreamReader(file, Encoding.Default)。这种方法解决了大部分问题,但是测试中发现对于有的UTF-8文件依然会造成乱码(中文windows环境)。

于是上网搜索解决方案。大多数是说UTF-8有特殊的前导码EF BB BF,只要认出这个就能判定是UTF-8编码了。但是我测试的一个文件发现前面并。

没有这些前导码啊…于是继续搜索……

先转一篇直接知道怎么做的博文:

http://blog.csdn.net/zdg/archive/2005/01/29/272643.aspx。

--------------------------------------------------------------------------------。

一)需求

很多情况下我们需要知道字节流的编码,比如。

1) 使用编辑器打开文本文件的时候,编辑器需要识别文本文件的各种编码。

2) 上传文件后,分析上传文件字节流需要知道它的编码。

二)探讨

不过C#目前还没有现成的函数能够获取,经过和同事的探讨,发现UTF8文件都有一个3字节的头,为“EF BB BF”(称为BOM--Byte Order Mark),判断这个头信息不就可以解决了吗?代码如下:

//判断上传的文件的编码是否是UTF8,buff为上传文件的字节流。

enc = Encoding.UTF8;。

testencbuff = enc.GetPreamble();。

if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1] && testencbuff[2]==buff[2])。

{

// 是 UTF8编码。

string buffString = enc.GetString(buff);。

}

不过后来发现,不是所有的UTF8编码的文件都有BOM信息,那如何解决呢?

三)最终的方案

没有BOM信息只有通过逐个字节比较的方式才能解决。幸好已经有人解决这个问题了。推荐大家看:

http://dev.csdn.net/Develop/article/10/10961.shtm。

http://dev.csdn.net/Develop/article/10/10962.shtm。

这里判断所有的编码,基本上都是通过字节比较的方式。java代码很容易移植到.NET上,下面是UTF8判断部分的C#代码:

int utf8_probability(byte[] rawtext)。

{

int score = 0;。

int i, rawtextlen = 0;。

int goodbytes = 0, asciibytes = 0;。

// Maybe also use UTF8 Byte Order Mark: EF BB BF。

// Check to see if characters fit into acceptable ranges。

rawtextlen = rawtext.Length;。

for (i = 0; i < rawtextlen; i++)。

{

if ((rawtext[i] & (byte)0x7F) == rawtext[i])。

{ // One byte。

asciibytes++;。

// Ignore ASCII, can throw off count。

}

else

{

int m_rawInt0 = Convert.ToInt16(rawtext[i]);。

int m_rawInt1 = Convert.ToInt16(rawtext[i+1]);。

int m_rawInt2 = Convert.ToInt16(rawtext[i+2]);。

if (256-64 <= m_rawInt0 && m_rawInt0 <= 256-33 && // Two bytes。

i+1 < rawtextlen &&。

256-128 <= m_rawInt1 && m_rawInt1 <= 256-65)。

{

goodbytes += 2;。

i++;

}

else if (256-32 <= m_rawInt0 && m_rawInt0 <= 256-17 && // Three bytes。

i+2 < rawtextlen &&。

256-128 <= m_rawInt1 && m_rawInt1 <= 256-65 &&。

256-128 <= m_rawInt2 && m_rawInt2 <= 256-65)。

{

goodbytes += 3;。

i+=2;

}

}

}

if (asciibytes == rawtextlen) { return 0; }。

score = (int)(100 * ((float)goodbytes/(float)(rawtextlen-asciibytes)));。

// If not above 98, reduce to zero to prevent coincidental matches。

// Allows for some (few) bad formed sequences。

if (score > 98)。

{

return score;。

}

else if (score > 95 && goodbytes > 30)。

{

return score;。

}

else

{

return 0;

}

}

--------------------------------------------------------------------------------。

OK.利用上面的代码,我来判断一下是UTF-8编码的概率:

view plaincopy to clipboardprint?。

Encoding encode; 。

StreamReader srtest = new StreamReader(file.FullName,Encoding.Default); 。

int p = utf8_probability(Encoding.Default.GetBytes(srtest.ReadToEnd())); 。

if( p>80 ) 。

encode = Encoding.GetEncoding(65001);//utf8 。

else

encode = Encoding.Default; 。

srtest.Close(); 。

Encoding encode;。

StreamReader srtest = new StreamReader(file.FullName,Encoding.Default);。

int p = utf8_probability(Encoding.Default.GetBytes(srtest.ReadToEnd()));。

if( p>80 )

encode = Encoding.GetEncoding(65001);//utf8。

else

encode = Encoding.Default;。

srtest.Close();。

大功告成~哈哈~

感谢zdg的博文~

备注三:from http://blog.csdn.net/zdg/archive/2005/01/29/272643.aspx。

字节流编码获取原来这么复杂 收藏。

一)需求

很多情况下我们需要知道字节流的编码,比如。

1) 使用编辑器打开文本文件的时候,编辑器需要识别文本文件的各种编码。

2) 上传文件后,分析上传文件字节流需要知道它的编码。

二)探讨

不过C#目前还没有现成的函数能够获取,经过和同事的探讨,发现UTF8文件都有一个3字节的头,为“EF BB BF”(称为BOM--Byte Order Mark),判断这个头信息不就可以解决了吗?代码如下:

//判断上传的文件的编码是否是UTF8,buff为上传文件的字节流。

enc = Encoding.UTF8;。

testencbuff = enc.GetPreamble();。

if(fileLength>testencbuff.Length && testencbuff[0] == buff[0] && testencbuff[1]==buff[1] && testencbuff[2]==buff[2])。

{

// 是 UTF8编码。

string buffString = enc.GetString(buff);。

}

不过后来发现,不是所有的UTF8编码的文件都有BOM信息,那如何解决呢?

三)最终的方案

没有BOM信息只有通过逐个字节比较的方式才能解决。幸好已经有人解决这个问题了。推荐大家看:

http://dev.csdn.net/Develop/article/10/10961.shtm。

http://dev.csdn.net/Develop/article/10/10962.shtm。

这里判断所有的编码,基本上都是通过字节比较的方式。java代码很容易移植到.NET上,下面是UTF8判断部分的C#代码:

int utf8_probability(byte[] rawtext)。

{

int score = 0;。

int i, rawtextlen = 0;。

int goodbytes = 0, asciibytes = 0;。

// Maybe also use UTF8 Byte Order Mark: EF BB BF。

// Check to see if characters fit into acceptable ranges。

rawtextlen = rawtext.Length;。

for (i = 0; i < rawtextlen; i++)。

{

if ((rawtext[i] & (byte)0x7F) == rawtext[i])。

{ // One byte。

asciibytes++;。

// Ignore ASCII, can throw off count。

}

else

{

int m_rawInt0 = Convert.ToInt16(rawtext[i]);。

int m_rawInt1 = Convert.ToInt16(rawtext[i+1]);。

int m_rawInt2 = Convert.ToInt16(rawtext[i+2]);。

if (256-64 <= m_rawInt0 && m_rawInt0 <= 256-33 && // Two bytes。

i+1 < rawtextlen &&。

256-128 <= m_rawInt1 && m_rawInt1 <= 256-65)。

{

goodbytes += 2;。

i++;

}

else if (256-32 <= m_rawInt0 && m_rawInt0 <= 256-17 && // Three bytes。

i+2 < rawtextlen &&。

256-128 <= m_rawInt1 && m_rawInt1 <= 256-65 &&。

256-128 <= m_rawInt2 && m_rawInt2 <= 256-65)。

{

goodbytes += 3;。

i+=2;

}

}

}

if (asciibytes == rawtextlen) { return 0; }。

score = (int)(100 * ((float)goodbytes/(float)(rawtextlen-asciibytes)));。

// If not above 98, reduce to zero to prevent coincidental matches。

// Allows for some (few) bad formed sequences。

if (score > 98)。

{

return score;。

}

else if (score > 95 && goodbytes > 30)。

{

return score;。

}

else

{

return 0;

}

}

参考资料:

字符检测程序(上) 检测GB2312、BIG5... 。

http://dev.csdn.net/Develop/article/10/article/10/10961.shtm。

Hello Unicode ——JAVA的中文处理学习笔记。

http://www.chedong.com/tech/hello_unicode.html。

备注四: from http://m.cnblogs.com/3108/768062.html。

今天解决了一个棘手的问题。

在Mono下面,StreamReader用Encoding.Default竟然无法正常读取GBK编码的文件。

随后展开了调查,用GBK编码的源代码中文Hello world程序竟然输出乱码!

用UTF-8编码的源代码文件编译的程序就是正确的。

难道真都是Mono对编码支持很混乱的原因吗?

不!很多.NET程序员把Encoding.Default理解错了。因为在Windows平台上Encoding.Default确实等于“GB18030”也就是GBK。

但是,随着环境的不同,Encoding.Default也会改变!比如在WinCE或者是一部分Linux,Unix上,默认的编码就是UTF-8,

这时候,Encoding.Default就相当于是Encoding.UTF8!

那要如何在默认是UTF-8的平台读取GBK编码的文件呢?很简单,用Encoding.GetEncoding("GBK")就可以了,GBK兼容GB2312。

以上是个人拙见,欢迎批评指正。

PS:

Oh,yeah yeah,我知道有些人会说,如果在Windows上就没有这样的烦心事,Mono的C# complier应该自动处理源文件编码的问题(针对。

于关于非默认编码的源文件的问题)。很不幸的告诉你,.NET Framework自带的C#编译器同样不能正确处理非默认编码的源文件,比如。

用Western什么什么的编码的源文件,特殊字符甚至会导致编译失败。但是为什么在Windows下,UTF-8编码的源文件就可以正确处理呢(

在UTF-8不是操作系统默认的编码的情况下)?说实话,that's a little tricky,因为绝大多数的UTF-8的编码都是带有BOM的,很多人应。

该还对VS2003中ASP.NET使用UTF-8编码的源文件造成浏览时候变成乱码记忆犹新吧,那就是因为VS2003默认的UTF-8编码是没有BOM的!

导致C#编译起编译ASP.NET页面的时候错误的使用了默认的GBK的编码,导致了最终页面的乱码现象。好在现在VS2005默认的UTF-8都也已。

经是UTF-8 with signature了。哦,BOM的全称是Byte Ordered Mask,目的是为了区别Unicode big或者small endian的,后来被一些Geek。

用来区别是不是UTF-8了,当然,这样做有利也有弊,总的来说,不够elegant。

点击阅读全文

打开CSDN,阅读体验更佳

关于Encoding.GetEncoding("utf-8")和Encoding.GetEncoding("GB2312...。

根据多次在ie6、ie7上测试发现用Encoding.Default的基本可以解决95%的乱码输出的问题,虽然网上有帖子说“谨慎使用Encoding.Default”,原帖见备注一。 但是另外的5%的乱码需要Encoding.GetEncoding("utf-8")才能解决,至于Encoding.GetEncoding(...。

UTF-8, Unicode, GB2312三种编码方式解析, 深入研究汉字编码_yang_B62...。

var gb = System.Text.Encoding.GetEncoding("GB2312"); return gb.GetString(new[] {(byte) (0xb0 + (rNum/94)), (byte) (0xa1 + (rNum%94))}); } /// /// UTF8 汉字字节流转成 Unicode 汉字字节流 /// ///...。

codepage与charset对照表。

代码页(CodePage) 名称(CharSet) 显示名称(中文) 显示名称(英文) Info.CodePage Info.Name(CharSet) Info.DisplayName(cn) Info.DisplayName(en) 37 IBM037 IBM EBCDIC(美国 - 加拿大) IBM EBCDIC (US-Canada) 437 IBM437...。

继续访问

Java InputStreamReader getEncoding()方法及示例。

InputStreamReader类的getEncoding()方法 (InputStreamReader Class getEncoding() method) getEncoding() method is available in java.io package. getEncoding()方法在java.io包中可用。 getEncoding() method is used to ge...。

继续访问

WebClient 字符串编码方式 Encoding.UTF8_bigsea76的博客_webc...。

似乎应该写WebClient wc = new WebClient();wc.Encoding = Encoding.UTF8;以前使用wc.Encoding = Encoding.GetEncoding("utf-8");似乎不对。

使用utf-8出现?乱码_hao123369963的博客_utf-8乱码。

byte[] space = new byte[]{0xc2,0xa0}; string UTFSpace = Encoding.GetEncoding("UTF-8").GetString(space); HtmlStr = HtmlStr.Replace(UTFSpace," "); java版: byte bytes[] = {(byte) 0xC2,(byte) 0xA0}; ...。

关于Encoding.GetEncoding("GB2312")。

我佛了 这玩意儿,编辑器可以用,打包就没反应了 从C:\Program Files\Unity\Editor\Data\Mono\lib\mono\unity找到这两个文件 放到工程Assets下。

继续访问

C#学习笔记(9)-对于 “byte[] buffer = Encoding.GetEncoding("GBK").GetBytes(str);”这行代码的理解。

源代码 下面是一个实现将一个字符串转换为字节数组的代码: string str = "你好,笑乾"; byte[] buffer =Encoding.GetEncoding("GBK").GetBytes(str); …… 为什么可以连续调用方法呢? GetEncoding(‘GBK’)的元数据为: public static Encoding GetEncoding(string ...。

继续访问

jquery encoding为utf-8_Unity中编码Encoding脱坑指南_weixin_3955952...。

publicstaticstringReadAllText(stringpath, Encoding encoding); 如果不传入这个参数,会使用默认的编码方式: Debug.Log(System.Text.Encoding.Default);// 你会看到这个输出是UTF8 那如果我们的文本文件是GB2312的编码方式,读出来的文件会...。

utf-8和gb2312乱码问题,延伸至中文编码乱码问题的解决(留坑以后有时...。

stringstr2 = Encoding.Default.GetString(Encoding.Convert(Encoding.GetEncoding("utf-8"), Encoding.GetEncoding("gb2312"), Encoding.Default.GetBytes(str))); 2、编码转换中部分汉字丢失,变为“?”问题及解决 ...。

C#GBK编码转ANSI编码

static string gbk_ansi(string str) { Encoding gbk = Encoding.GetEncoding(936); Encoding ansi = Encoding.GetEncoding("ANSI"); byte[] buf = gbk.GetB...。

继续访问

.NET Core默认不支持GB2312,使用Encoding.GetEncoding(“GB2312”)的时候会抛出异常。

.NET Core默认不支持GB2312,使用Encoding.GetEncoding(“GB2312”)的时候会抛出异常。 解决方案是手动安装System.Text.Encoding.CodePages包(Install-Package System.Text.Encoding.CodePages), 然后在Starup.cs的Configure方法中加入Encoding.Regist...。

继续访问

C# 里,utf8 和 GBK,GB2312 字符集 互相转换,代码和注意点_rolling_kit...。

usingSystem.Text;...publicstaticstringUTF8ToGBK(stringtext){Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);try{Encodingutf8=Encoding.UTF8;Encodinggbk=Encoding.GetEncoding("gbk");//Encoding.Default ,936byte[]temp=...。

以当前默认file encoding读取文件然后以utf-8写入新文件_russle的博客...。

在简体中文Windows上, 默认启动的Java程序如果没有加上设置file encoding,那么默认生成的文件(写文件时没有指定编码的那种)是GBK编码的,这样的文件传输到其它非GBK编码的机器上会无法正常显示。 需要将其转换为utf-8格式的,这样就能在所...。

ANSI、GBK、Unicode编码简介。

ANSI编码表: DOS与ANSI分布图: 各种编码依次产生简介: ANSII码:英文码+英文常用图形,一个字符占用一个字节。 GB2312(1980年,中国大陆,最早国标码):即中文ANSII码,中文码占用了0x80~0xFF,收录汉字6763个,汉字图形682个。ASII有94个区,每个区94位,每个区位放一个字符。一个字节只能表示256个字符,不够用,因此要用两个字节,最...。

继续访问

Linux下面提示Encoding 936 data could not be found.。

最近在使用CentOS 7 进行Mono测试的时候,发现好多异常情况,其中程序里面有用到GBK编码,然后运行的时候就报错了,错误码具体如下:WARNING: The runtime version supported by this application is unavailable. Using default runtime: v4.0.30319Unhandled Exception: Sy。

继续访问

C#之windows桌面软件第八课:汉字(GB2312)与编码(UTF-8)之间的相互转换。

C#之windows桌面软件第八课:汉字(GB2312)与编码(UTF-8)之间的相互转换 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Te...。

继续访问

C# Encoding.GetEncoding 编码列表。

C# Encoding.GetEncoding 编码列表,包含常用的各种编码的名称和代码,分享给大家,做为开发工具资料用。

Encoding code = Encoding.GetEncoding(编码类型);。

对所要处理的页面设置编码类型语句:Encoding code = Encoding.GetEncoding(编码类型);常用的有:Encoding code = Encoding.GetEncoding("GB2312");Encoding code = Encoding.GetEncoding("UTF-8 ");。

继续访问

encoding.getencoding utf-8。

javascript

linux怎么看文件的字符集编码?的相关图片

linux怎么看文件的字符集编码?

显示界面,JSP 2.0 。

JAVA容器:Tomcat 5.X。

MVC构架:Struts 1.2。

ORM工具:Hibernate 3。

数据库:MySQL 5.0。

编译IDE:MyEclipse 5.0。

知道了有六个地方要设定编码,那么哪种编码最好呢?使用中文可以GBK,但我认为UTF-8会是更好的选择,如果想知道了解编码的更多细节,请访问:

计算机编码大全-A

计算机编码大全-B

好现在选定UTF-8,在上面的这六个地方一一设定吧:

显示界面,JSP

在页面的开头加入或修改成:<%@ page language="java" pageEncoding="utf-8"%> 红色部分为要设定部分。

JAVA容器:Tomcat

本人参照某兄台的之作:Tomcat中文编码问题解决方案(简) 有兴趣可以进去看看。

下面开始设定,在Tomcat安装目录下的conf文件打开Server.xml文件,找到相应段落并更改成以下字样:

<Connector port="8080" maxThreads="150" minSpareThreads="25"。

maxSpareThreads="75" enableLookups="false" redirectPort="8443"。

acceptCount="100" debug="0" connectionTimeout="20000"。

disableUploadTimeout="true" URIEncoding="utf-8"/>。

红色部分为要设定部分。

MVC构架:Struts

在这里添加一个字符集的Fliter,代码如下:

package com.ruder.filters;。

//上面的包名表示你把这个Fliter文件放在哪个包中,在下面的Web.xml也要相应改动。

import java.io.IOException;。

import javax.servlet.Filter;。

import javax.servlet.FilterChain;。

import javax.servlet.FilterConfig;。

import javax.servlet.ServletException;。

import javax.servlet.ServletRequest;。

import javax.servlet.ServletResponse;。

import javax.servlet.UnavailableException;。

public class SetCharacterEncodingFilter implements Filter {。

protected String encoding = null;。

protected FilterConfig filterConfig = null;。

protected boolean ignore = true;。

public void destroy() {。

this.encoding = null;。

this.filterConfig = null;。

}

public void doFilter(ServletRequest request, ServletResponse response,。

FilterChain chain)。

throws IOException, ServletException {。

// Conditionally select and set the character encoding to be used。

if (ignore || (request.getCharacterEncoding() == null)) {。

String encoding = selectEncoding(request);。

if (encoding != null)。

request.setCharacterEncoding(encoding);。

}

// Pass control on to the next filter。

chain.doFilter(request, response);。

public void init(FilterConfig filterConfig) throws ServletException {。

this.filterConfig = filterConfig;。

this.encoding = filterConfig.getInitParameter("encoding");。

String value = filterConfig.getInitParameter("ignore");。

if (value == null)。

this.ignore = true;。

else if (value.equalsIgnoreCase("true"))。

this.ignore = true;。

else if (value.equalsIgnoreCase("yes"))。

this.ignore = true;。

else

this.ignore = false;。

protected String selectEncoding(ServletRequest request) {。

return (this.encoding);。

下面是对Web.xml的配置:

<filter>

<filter-name>Set Character Encoding</filter-name>。

<filter-class>com.ruder.filters.SetCharacterEncodingFilter</filter-class>。

<init-param>。

<param-name>encoding</param-name>。

<param-value>UTF-8</param-value>。

</init-param>。

</filter>。

<filter-mapping>。

<filter-name>Set Character Encoding</filter-name>。

<url-pattern>。

21 public void init(FilterConfig arg0) throws ServletException {。

22 // TODO Auto-generated method stub。

23 this.filterConfig = arg0;。

24 this.defaultEncoding = filterConfig.getInitParameter("defaultencoding");。

25 }

26

27

30 public void doFilter(。

31 ServletRequest request,。

32 ServletResponse response,。

33 FilterChain chain)。

34 throws IOException, ServletException {。

35 // TODO Auto-generated method stub。

36 request.setCharacterEncoding(selectEncoding(request));。

37 chain.doFilter(request, response);。

38 }

39

40

41 public void destroy() {。

42

43 this.defaultEncoding = null;。

44 this.filterConfig = null;。

45 }

46

47

48 protected String selectEncoding(ServletRequest request) {。

49

50 return this.defaultEncoding;。

51 }

52

53}

4.提交表单的jsp页面设置

<%@ page language="java" contentType="text/html; charset=UTF-8"%>。

至此问题已经解决,但是还有一些我们应该了解的,下面我简述一下:。

为每个jsp页面设置了其编码格式(utf-8),但传递数据到另一页面时依然显示为乱码? 首先要需要了解的是web容器默认编码是iso-8859-1,一个汉字占用两个字节,而在utf-8中一个汉字占用三个字节。所以在数据传递过程中,必须手动设定容器编码格式,否则会出现字符位丢失的情况。即3个字节变为两个字节,自然会变成乱码。为什么保存到数据库中的数据都变成了乱码? 原理同上,首先要搞清楚使用的数据库默认的编码格式,比如mysql默认的字符编码是ISO-8859-1。所以必须手动修改其默认编码格式。 清楚了以上问题后,再来看如何解决utf-8的乱码问题。

1.设置web容器的编码格式。为你的servlet的doGet或doPost方法开始处加入如下代码:request.setCharacterEncoding("utf-8"); response.setCharacterEncoding ("utf-8");。

2.为每个jsp页面指定其编码格式。<%@ page pageEncoding="utf-8"%>。

3.在连接数据库用的URL后加入:useUnicode=true; characterEncoding=utf-8 如: url="jdbc:mysql:///db1?useUnicode=true; characterEncoding=utf-8"。

4.为指定数据库默认编码格式。在C:\WINDOWS目录下找到my.ini文件,并在 [mysqld]中加入default-character-set=gbk,重新启动mysql服务。

至此,乱码问题全部解决。

起初总搞上去不清,为什么要将mysql的默认编码格式设置为gbk,后来由相关的资料得知utf-8默认输入编码方式为gbk,默认输出编码方式为utf-16be。

个人认为,将数据进行utf-8进行编码的目的(即将中文编码为%的形式),主要是为了在多层服务间进行数据传输时,防止发生字符丢失(如msn)。普通的web程序显然没有必要这样做,只要使用以上方法进行处理,就可以有效的解决乱码问题,从而结省存储空间。如果都像公司的SC系统那样,将一个汉字编码为18个字符后,再存储到数据库中,抛开效率不说,就存储空间的浪费就够人受的,要知道,那是需要银子地!

为什么导入数据有的电脑要输入encoding=gbk,有的不用的相关图片

为什么导入数据有的电脑要输入encoding=gbk,有的不用

在Linux中查看文件编码可以通过以下几种方式:1.在Vim中可以直接查看文件编码:setfileencoding,即可显示文件编码格式。2.enca(如果你的系统中没有安装这个命令,可以用sudoyuminstall-yenca安装)查看文件编码。

下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。

一,查看文件编码:在Linux 中查看文件编码可以通过以下几种方式:

1.在Vim中可以直接查看文件编码:setfileencoding即可显示文件编码格式。如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在~/.vimrc文件中添加以下内容:setencoding=utf-8fileencodings=ucs-bom,utf-8,cp936这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。

2.enca(如果你的系统中没有安装这个命令,可以用sudoyuminstall-yenca安装)查看文件编码&#36;encafilenamefilename:Universaltransformationformat8bits;UTF-8CRLFlineterminators需要说明一点的是,enca对某些GBK编码的文件识别的不是很好,识别时会出现:Unrecognizedencoding。

二,文件编码转换

1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式:setfileencoding=utf-8  2.iconv转换,iconv的命令格式如下:输入/输出格式规范:-f,--from-code=名称原始文本编码-t,--to-code=名称输出编码信息:  www.Svn8.Com-l,--list列举所有已知的字符集输出控制:-c从输出中忽略无效的字符-o,--output=FILE输出文件Svn8.Com-s,--s  ilent关闭警告--verbose打印进度信息-?,--help给出该系统求助列表--usage给出简要的用法信息-V,--version打印程序版本号  例子:iconv-futf-8-tgb2312aaa.txt>bbb.txt这个命令读取aaa.txt文件,从utf-8编码转换为gb2312编码,其输出定向到bbb.txt文件。iconv-fencoding-tencodinginputfile比如将一个UTF-8编码的文件转换成GBK编码iconv-fGBK-tUTF-8file1-ofile2。

3.enconv转换文件编码比如要将一个GBK编码的文件转换成UTF-8编码,操作如下enconv-Lzh_CN-xUTF-8filename。

如何确定文件编码格式的方法

这里的encoding不是说编码,而是告诉计算机这个文件的编码方式。

open文件后,不管你是要进行read操作还是write操作,都将认准编码方式来进行解码或者编码。

适用范围最广的是utf-8,所以一般你只要加上 encoding = ‘utf-8’这句话就可以了。

然后你会发现有不少人不喜欢守规矩,代码里经常没有这一句。

那是因为,macOS和Linux系统默认的编码形式就是utf-8.。

与之相对应的是,Windows的默认编码形式是CP1252.。

所以加上 encoding = ‘utf-8’应该是程序员最基本的素养。如果一项工程是接力完成的话,你用macOS写程序运行不影响,到了使用Windows的小伙伴那里大概率会出现连片的乱码,你最好祈祷你的fellow是一个熟练的老手,要不然他花上一天一夜的时间debug之后可能会想宰了你。

原文地址:http://www.qianchusai.com/encoding=utf-30.html

连抉,连抉出演

连抉,连抉出演

cc/脚上湿疹有几种图片,脚上湿疹的症状有哪些?

cc/脚上湿疹有几种图片,脚上湿疹的症状有哪些?

影驰1660super大将,影驰1660super大将和技嘉1660super

影驰1660super大将,影驰1660super大将和技嘉1660super

qca9558和mt7621a

qca9558和mt7621a

cc/高校论文查重包括英文摘要吗,毕业论文查重包括英文摘要吗

cc/高校论文查重包括英文摘要吗,毕业论文查重包括英文摘要吗

妈妈的手作文400字左右,妈妈的手作文400字左右三年级

妈妈的手作文400字左右,妈妈的手作文400字左右三年级

k大网课录屏百度云,k大课程资源百度云

k大网课录屏百度云,k大课程资源百度云

wndr3800不死uboot

wndr3800不死uboot

ltv预测

ltv预测

STM32F407-90

STM32F407-90