精华内容
下载资源
问答
  • JSP中的编码设置

    千次阅读 2017-07-10 10:13:12
    web页面 的编码设置 以及相互之间的 影响和作用域
    1. pageEncoding:<%@ page pageEncoding=”UTF-8”%>
      jsp页面编码: jsp文件本身的编码
    2. contentType: <%@ page contentType=”text/html; charset=UTF-8”%>
      web页面显示编码:jsp的输出流在浏览器中显示的编码
    3. html页面charset:
      web页面输入编码: 输入框输入的字体编码
    4. setCharacterEncoding:request.setCharacterEncoding(),response.setCharacterEncoding()
      web服务器输入的请求流: web Server相应浏览器的请求数据
    5. setContentType:response.setContentType()
      web服务器输出的响应流: web Server相应浏览器的输出数据

    他们之间的相互影响和作用域,以及先后作用顺序

    1. pageEncoding: 只是指明了 JSP 页面本身的编码格式,跟页面显示的编码没有关系;
    容器在读取(文件)或者(数据库)或者(字符串常量)时将起转化为内部使用的 Unicode,而页面显示的时候将
    内部的Unicode转换为contentType指定的编码后显示页面内容;
    如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,
    否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用
    默认的ISO-8859-1。
    
    2. contentType: 指定了MIME类型和JSP页面回应时的字符编码方式。MIME类型的默认值是“text/html”;
    字符编码方式的默认值是“ISO-8859-1”. MIME类型和字符编码方式由分号隔开;
    
    3. pageEncoding和contentType的关系:
        1. pageEncoding的内容只是用于jsp输出时的编码,不会作为header发出去的; 是告诉web Server
            jsp页面按照什么编码输出,即web服务器输出的响应流的编码;
       2. 第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译
            成统一的UTF-8 JAVA源码(即.java).
       3. 第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,
            经过这个阶段的结果全部是UTF-8的encoding的java源码.JAVAC用UTF-8的encoding读取
            java源码,编译成UTF-8 encoding的二进制码(即.class),这是JVM对常数字串在二进制码
            (java encoding)内表达的规范.
       4. 第三阶段是Tomcat(或其的application container)载入和执行阶段二的来的JAVA二进制码,
            输出的结果,也就是在客户端见到的,这时隐藏在阶段一和阶段二的参数contentType就发挥了功效   
    
    4. 和contentType效果一样的设置方式还有 html页面charset, response.setCharacterEncoding(),
        response.setContentType(),response.setHeader(); response.setContentType(),
        response.setHeader();优先级最好,其次是response.setCharacterEncoding();再者是
        <%@page contentType="text/html; chareset=gbk"%>,最后是<meta http-equiv="content-type"
        content="text/html; charset=gb2312" />.
    
    5. web页面输入编码: 在设置页面编码<%@page contentType="text/html; chareset=gbk"%>的同时,也就指定了页面的输入编码; 
       如果页面的显示被设置为UTF-8,那么用户所有的页面输入都会按照 UTF-8 编码; 服务器端程序在读 取表单输入之前要设定输入编码; 
     表单被提交后,浏览器会将表单字段值转换为指定字符集对应的字节值,然后根据 HTTP 标准 URL编码方案对结果字节进行编码.
     但是页面需要告诉服务器当前页面的编码方式;
     request.setCharacterEncoding(),能修改Serverlet获取请求的编码,response.setCharacterEncoding(),能修改Serverlet返回结果的编码.
    
    展开全文
  • vim 字符编码设置 及 修改编码

    万次阅读 2017-07-13 15:35:18
    vim 编码方式的设置 和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手...


    原文地址:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html

    参考文章:

    linux下查看文件编码及修改编码


    vim 编码方式的设置
    和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。 
    Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下: 
    * encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在.vimrc 中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码). 
    * fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。 
    * fileencodings: Vim自动探测fileencoding的顺序列表, 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。 
    * termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。 
    好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看 Vim 的多字符编码方式支持是如何工作的。 
    1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。 
    2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。 
    3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll(注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。 
    4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。 

    对于fedora来说,vim的设置一般放在/etc/vimrc文件中,不过,建议不要修改它。可以修改~/.vimrc文件(默认不存在,可以自己新建一个),写入所希望的设置。

    我的.vimrc文件如下:

    :set encoding=utf-8
    :set fileencodings=ucs-bom,utf-8,cp936
    :set fileencoding=gb2312
    :set termencoding=utf-8

    其中,fileencoding配置可以设置utf-8,但是我的mp3好像不支持utf-8编码,所以干脆,我就设置为gb2312了。现在搞定了,不管是vi中还是mp3上都可以显示无乱码的.txt文件了。


    查看文件编码
    Linux中查看文件编码可以通过以下几种方式:
    1.在Vim中可以直接查看文件编码
    :set fileencoding
    即可显示文件编码格式。
    如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
    ~/.vimrc 文件中添加以下内容:

    set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

    这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照 fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。
    2. enca (如果你的系统中没有安装这个命令,可以用sudo yum install -y enca 安装 )查看文件编码
    $ enca filename
    filename: Universal transformation format 8 bits; UTF-8
    CRLF line terminators
    需要说明一点的是,enca对某些GBK编码的文件识别的不是很好,识别时会出现:
    Unrecognized encoding

    文件编码转换
    1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
    :set fileencoding=utf-8

    2. enconv 转换文件编码,比如要将一个GBK编码的文件转换成UTF-8编码,操作如下
    enconv -L zh_CN -x UTF-8 filename

    3. iconv 转换,iconv的命令格式如下:
    iconv -f encoding -t encoding inputfile
    比如将一个UTF-8 编码的文件转换成GBK编码
    iconv -f UTF-8 -t GBK file1 -o file2

    查看文件编码file命令
    file ip.txt  ip.txt: UTF-8 Unicode text, with escape sequences
    一、利用iconv命令进行编码转换文件内容编码转换  iconv命令用于转换指定文件的编码,默认输出到标准输出设备,亦可指定输出文件。  用法: iconv [选项...] [文件...]  有如下选项可用:  输入/输出格式规范:  -f, --from-code=名称 原始文本编码  -t, --to-code=名称 输出编码  信息:  -l, --list 列举所有已知的字符集    输出控制:  -c 从输出中忽略无效的字符  -o, --output=FILE 输出文件  -s, --silent 关闭警告  --verbose 打印进度信息  -?, --help 给出该系统求助列表  --usage 给出简要的用法信息  -V, --version 打印程序版本号    例子:  iconv -f utf-8 -t gb2312 aaa.txt >bbb.txt  这个命令读取aaa.txt文件,从utf-8编码转换为gb2312编码,其输出定向到bbb.txt文件。
    二、文件名编码转换
    因为现在用linux,原来在windows里的文件都是用GBK编码的。所以copy到linux下是乱码,文件内容可以用iconv来转换可是好多中文的文件名还是乱码,找到个可以转换文件名编码的命令,就是convmv。
    convmv命令详细参数  例如
    convmv -f GBK -t UTF-8 *.mp3
    不过这个命令不会直正的转换,你可以看到转换前后的对比。如果要直正的转换要加上参数 --notest
    convmv -f GBK -t UTF-8 --notest *.mp3
    -f 参数是指出转换前的编码,-t 是转换后的编码。这个千万不要弄错了。不然可能还是乱码哦。还有一个参数很有用。就是 -r 这个表示递归转换当前目录下的所有子目录。
    * 需要安装 convmv-1.10-1.el5.noarch.rpm  
    三、  更好的傻瓜型命令行工具enca,它不但能智能的识别文件的编码,而且还支持成批转换。    1.安装    
    $sudo apt-get install enca    
    2.查看当前文件编码    
    enca -L zh_CN ip.txt     Simplified Chinese National Standard; GB2312     Surrounded by/intermixed with non-text data    
    3.转换    命令格式如下    
    $enca -L 当前语言 -x 目标编码 文件名    
    例如要把当前目录下的所有文件都转成utf-8    
    enca -L zh_CN -x utf-8 *     
    检查文件的编码 enca -L zh_CN file     
     将文件编码转换为"UTF-8"编码  enca -L zh_CN -x UTF-8 file
    如果不想覆盖原文件可以这样         enca -L zh_CN -x UTF-8 < file1 > file2 



    展开全文
  • obs自定义编码设置by Wesley McCann 韦斯利·麦肯(Wesley McCann) 通过7个步骤设置OBS进行实时编码 (Setting up OBS for Live Coding in 7 Steps) Twitch TV is a popular live-streaming service. You ...

    obs自定义编码设置

    by Wesley McCann

    韦斯利·麦肯(Wesley McCann)

    通过7个步骤设置OBS进行实时编码 (Setting up OBS for Live Coding in 7 Steps)

    Twitch TV is a popular live-streaming service. You traditionally used Twitch to stream yourself playing video games, but recently Twitch has started encouraging people to stream themselves coding.

    Twitch TV是一种流行的实时流媒体服务。 传统上,您使用Twitch来播放视频游戏,但是最近Twitch开始鼓励人们自己编码。

    While typical video game live streaming configurations will work for live coding, they are overkill. When streaming live coding, you can get away with significantly lower settings, making it much easier for people with a slower connection to watch your live stream.

    尽管典型的视频游戏直播流配置可用于直播编码,但它们过大了。 在流式直播编码时,您可以省去很多较低的设置,从而使连接速度较慢的人更容易观看直播。

    This article will show you how to configure the popular OBS (Open Broadcast Software) to keep your stream’s quality high while minimizing the bandwidth requirements for your viewers.

    本文将向您展示如何配置流行的OBS(开放广播软件),以保持流的高质量,同时最大程度地减少观众的带宽需求。

    Note: In order to keep this article reasonably short, we will only show screen shots from the Windows version of OBS. Note that most of should be pretty much the same on Mac and Linux.

    注意:为了使本文简短,我们将仅显示Windows版本的OBS的屏幕截图。 请注意,在Mac和Linux上,大多数功能应该几乎相同。

    第一步 (First Steps)

    1. You will need to download and install OBS for your platform. The OBS website is located here. I prefer OBS studio (which is the only option for non-windows users), as it is the newest version currently being developed, and appears to use bandwidth better.

      您将需要为您的平台下载并安装OBS。 OBS网站位于此处 。 我更喜欢OBS Studio(这是非Windows用户的唯一选择),因为它是当前正在开发的最新版本,并且似乎可以更好地使用带宽。

    2. Once installed you will want to start by setting up the scene. First you will want to make sure there is a scene inside of the left most box. This should be there by default, however if it is not just right click inside the box and select “Add -> Scene”.

      安装完成后,您将要开始设置场景。 首先,您需要确保最左侧的框内有一个场景。 默认情况下,它应该存在于此,但是,如果不只是在框内单击鼠标右键,然后选择“添加->场景”。

    3. Next you will want to capture your entire screen or just a window. The decision is up to you. I personally like to capture my full screen but I will show you both options below.

    3.接下来,您将要捕获整个屏幕或仅一个窗口。 该决定由您决定。 我个人喜欢全屏显示,但下面将向您显示这两个选项。

    4. Once you have this set up you will want to get your microphone working so you can communicate with your audience. On windows you will want to click on the settings button > audio tab. Once here you will want to find “Mic/Auxiliary Audio Device” and use the drop down to select your input device.

    4.完成此设置后,您将需要使麦克风正常工作,以便与听众进行交流。 在Windows上,您需要单击设置按钮>音频选项卡。 到这里后,您将要找到“麦克风/辅助音频设备”,然后使用下拉菜单选择您的输入设备。

    5. Now that you have the scene set up to capture your display and your microphone you need to set up a streaming service. To do this, open your settings > Stream tab. Once there, select:Stream Type: Streaming ServicesService: TwitchServer: Choose the server closest to youStream key: The stream key provided by Twitch

    5.现在,您已经设置了场景来捕获显示器和麦克风,您需要设置流服务。 为此,请打开设置>流标签。 一旦出现,SELEC 吨: 流ŤYPE:流SERVIC 上课 SERV冰:蠢CH 丝氨酸版本:选择最靠近所述服务器至y 密钥:由抽搐提供的流密钥

    6. Next you will want to change output settings. You can do this by going to settings > output. From here you will want to select:Output Mode: AdvancedBe on the “Streaming Tab”Bitrate: No higher than 1200. Try to match your upload speed. For example my upload speed is usually between 800Kbps-900Kbps. I have set my bitrate to 700.Keyframe Interval: 2 secondsUser CBR: CheckCPU Usage: Veryfast. This is the recommended value if you are unsure of your hardware.All other settings leave set to default.

    6.接下来,您将要更改输出设置。 您可以转到设置>输出 。 在这里,您将要选择 输出代码:AdvancedBe在“ Streaming Tab 比特率 :不高于1200。尝试匹配您的上传速度。 例如,我的上传速度通常在800Kbps-900Kbps之间。 我有我的比特率设置为70 0 关键帧国米 VAL:2塞康DS 用户 CBR:车CK CPU我们年龄:Veryfast。 如果不确定您的努力程度,这是建议值 所有其他设置保留默认值

    7. Finally, you will want to check your frames per second (FPS) of your stream. Not properly configuring your FPS is probably the biggest way to waste of bandwidth when live coding. Navigate to settings > video. Once there you will want to click the dropdown “Common FPS Values” and select “Integer FPS Values”. In the input box that shows up change the 30 to 15. 15 FPS should be fine for live coding.

    7.最后,您将要检查流的每秒帧数(FPS)。 实时编码时,未正确配置FPS可能是浪费带宽的最大方法。 导航到设置>视频。 到达那里后,您将要单击下拉菜单“ Common FPS Values”,然后选择“ Integer FPS Values”。 在显示的输入框中,将30更改为15。15FPS对于实时编码应该没问题。

    That should be all you need to do to set up OBS to begin live coding!

    那应该是设置OBS以开始实时编码所需的一切!

    There are a few more things that you may want to do such as capture output audio to play music on stream. I will write another article about this very soon with Windows- and Mac-specific GIFs.

    您可能还需要做几件事,例如捕获输出音频以在流中播放音乐。 我将很快用Windows和Mac专用的GIF撰写另一篇有关此的文章。

    If you have any questions, feel free to message me on Gitter or tweet at me at @septimus98.

    如果您有任何疑问,请随时在Gitter上我发消息,或通过@ septimus98向我发送推文。

    翻译自: https://www.freecodecamp.org/news/setting-up-obs-for-live-coding-7-steps-99b8986e7249/

    obs自定义编码设置

    展开全文
  • WebKit 编码设置

    千次阅读 2014-03-04 16:15:21
    本文描述了Webkit文本资源解码时,编码格式的选择问题。这里的文本资源是指HTML/XML、CSS,以及JS文件等。如果没有明确说明,本文提到的“文本解码器”均特指TextResourceDecoder类。 文本资源解码器由...

    转自:

    http://blog.sina.com.cn/s/blog_71b5e2520100s1cr.html

    本文描述了Webkit文本资源解码时,编码格式的选择问题。这里的文本资源是指HTML/XML、CSS,以及JS文件等。如果没有明确说明,本文提到的“文本解码器”均特指TextResourceDecoder类。

    文本资源解码器由TextResourceDecoder类表示。该类主要是对文本资源进行编码检测,以确定最终的编码格式;而进行实际的文本解码是m_codec成员,其类型为TextCodec的。下面是该类的主要属性字段:
    ContentType m_contentType;          //文本资源类型:PlainText, HTML, XML, CSS
    TextEncoding m_encoding;              //规范化后的编码格式,如UTF8
    OwnPtr<TextCodec> m_codec;        //文本解码器,进行实际的文本编解码
    EncodingSource m_source;               //编码格式来源
    const char* m_hintEncoding;            //线索编码,用于自动检测
    bool m_usesEncodingDetector;          //是否使用编码检测器

    TextResourceDecoder决定编码格式时,其来源由EncodingSource表示:

    1. enum EncodingSource {  
    2.     DefaultEncoding,                         //默认编码  
    3.     AutoDetectedEncoding,               //自动检测编码  
    4.     EncodingFromXMLHeader,        //来自于XML头部  
    5.     EncodingFromMetaTag,               //来自于Meta标签  
    6.     EncodingFromCSSCharset,          //来自于CSS的@charset  
    7.     EncodingFromHTTPHeader,        //来自于HTTP响应头  
    8.     UserChosenEncoding,                  //用户选择编码  
    9.     EncodingFromParentFrame          //来自于父Frame  
    10. };  


    下面分别介绍这些类型。
    1  默认编码
    创建TextResourceDecoder对象时,其构造函数需要三个参数,分别为文本资源的MIME类型,指定的编码格式,以及是否使用编码检测器。该构造函数根据文本的MIME类型和指定的编码格式设置一个默认的编码(参考:函数defaultEncoding),编码来源设置为DefaultEncoding。默认的编码的选择规则如下:
    1.      如果文本资源类型为XML,那么设置默认编码为UTF8
    2.      如果传入的编码名规范化后无效,那么设置默认编码为Latin1
    3.      将传入的编码作为默认编码
     
    下面详细介绍三种文文本类型的文件创建文本解码器时,传入的默认编码参数。
    1.1  HTML/XML文件
    从网络接收到数据后(参考:DecodedDataDocumentParser::appendBytes),调用函数DocumentWriter::createDecoderIfNeeded()创建文本解码器。
    创建TextResourceDecoder对象时,构造函数的参数设置如下:
    1.      从HTTP响应头获取MIME类型参数
    2.      如果Settings对象不为空,那么从Settings中获取默认的文本编码,以及是否使用编码检测器参数;否则编码名设置为空,是否使用编码检测器的参数使用默认参数(false);
    此外,如果Settings对象不为空,那么设置该对象的线索编码(m_hintEncoding)为其父Frame的编码格式。(前提是,当前Frame与其父Frame具有相同的security origin)
    1.2  CSS文件
    解析HTML页面过程中,请求CSS外部资源时(HTMLLinkElement::process()),会传入编码参数,以便CachedCSSStyleSheet对象创建文本解码器。传入文本解码器构造函数的参数设置如下:
    1.      MIME类型参数为:"text/css"
    2.      如果link标签的Charset属性不为空,那么传入构造函数的编码名为该属性值;否则传入该文档所在Frame的编码格式(DocumentWriter::encoding)
    3.      是否使用编码检测器:使用默认参数(false)
    1.3  JS文件
    与CSS文件类似,请求JS资源时(ScriptElementData::requestScript),生成CachedScript对象,便会创建文本解码器。传入的文本解码器的参数设置如下:
    1.      MIME类型参数为:"application/javascript"
    2.      如果Script标签的Charset属性不为空,那么传入构造函数的编码名为该属性值;否则传入该文档所在Frame的编码格式(DocumentWriter::encoding)
    3.      是否使用编码检测器:使用默认参数(false)
    1.4  小结
    创建文本资源解码器时,「默认编码」的设置:
    1.      HTML/XML:如果是XML,那么默认编码为UTF8;否则,优先考虑Settings中设置的默认编码,如某些浏览器中设置的GBK
    2.      CSS/JS:优先考虑所在标签指定的编码,其次是文档所在Frame的编码格式
    3.      在传入编码规范化后无效的情况下,设置默认编码为Latin1
    4.      编码来源为:DefaultEncoding
    PS:文档所在Frame的编码格式获取如下:
    1. String DocumentWriter::encoding() const  
    2. {  
    3.     if (m_encodingWasChosenByUser && !m_encoding.isEmpty())  
    4.         return m_encoding;  
    5.     if (m_decoder && m_decoder->encoding().isValid())  
    6.         return m_decoder->encoding().name();  
    7.     Settings* settings = m_frame->settings();  
    8.     return settings ? settings->defaultTextEncodingName() : String();  
    9. }  

     
    2  HTTP响应头
    HTTP响应头以Content-Type来指定所请求资源的MIME类型和编码格式,例如:Content-Type:text/html;charset=gb2312。通常,HTTP响应头指定的编码格式的优先级高于页面内指定的编码格式,低于用户选择的编码格式。因为网关可能会对页面进行重新编码,并将编码格式以响应头返回。但是,HTTP响应头并不总是会返回编码格式。
    2.1  请求HTML/XML页面
      当Webkit接收到页面数据后,会调用DocumentWriter的setEncoding函数进行编码格式设置(参考:FrameLoaderClientUC::receivedData),该设置包括编码名(m_encoding)和是否是用户显示指定编码格式(m_encodingWasChosenByUser)。其中,用户显示指定的编码格式的优先级高于HTTP响应头的编码格式。
    PS: 接收到页面文档数据后函数receivedData先于createDecoderIfNeeded被调用!
    在DocumentWriter::createDecoderIfNeeded()中:
    1.      如果m_encoding为空,即用户没有显示指定编码格式,并且HTTP响应头也没有返回编码格式,那么将当前的文本解码器设置为父Frame的实际解码格式(具体代码为:parentFrame->document()->inputEncoding()),同时设置编码来源为EncodingFromParentFrame;
    2.      否则,将m_encoding值设置为当前文本解码器的编码格式;同时,如果参数m_encodingWasChosenByUser为真,那么设置编码来源为UserChosenEncoding,否则设置为EncodingFromHTTPHeader;
    3.      此外,将当前的文本解码器设置为对应Document的解码器
    2.2  请求CSS文件
    当网络层接收到响应头后,如果响应头返回了编码格式,那么调用CSS缓存对象的setEncoding函数替换默认的编码格式,设置EncodingFromHTTPHeader作为编码来源(具体参见:CachedCSSStyleSheet::setEncoding)。
    2.3  请求JS文件
    与CSS类似,调用JS缓存对象(CachedScript)的setEncoding函数替换默认的编码格式,设置编码来源为EncodingFromHTTPHeader。
    2.4  小结
    当接收到HTTP响应头后:
    1.      CSS/JS: HTTP响应头返回编码的优先级比默认编码高
    2.      HTML /XML:用户显示指定的编码格式高于HTTP响应头返回的编码格式,父Frame编码格式的优先级最低
    3  页内编码
    这里的页内编码是指,文本资源文件中指定的编码格式,比如,XML 声明中encoding属性、HTML文件的meta标签指定的编码,以及CSS的@charset等。此外,JS文件只会检测BOM(Byte Order Mark)头部。
    在调用文本解码器对数据解码时(TextResourceDecoder::decode),会对页内编码进行检测。
    3.1  检测BOM
    TextResourceDecoder::checkForBOM函数在资源文件的开头检测是否有UTF-16/32或者UTF-8的BOM标记。如果检测到BOM标记存在,那么更改当前的编码格式,并设置编码来源为AutoDetectedEncoding。在Webkit中BOM的优先级比用户选择的编码格式高。
    3.2  检测CSS编码                                                  
    如果文本资源文件是CSS,并且当前解码器的编码来源是DefaultEncoding或者是EncodingFromParentFrame(也就是说,如果检测到BOM的存在,便不会再进行CSS字符集的查找),那么将会对CSS文件进行页内编码检测,其实现逻辑在TextResourceDecoder::checkForCSSCharset函数中。如果检测到CSS文件中指定了某种编码格式,那么更改当前解码器的编码格式,并且设置编码来源为EncodingFromCSSCharset。
    3.3  检测头部编码
    如果文本资源文件是HTML或者XML,并且当前解码器的编码来源是DefaultEncoding或者是EncodingFromParentFrame(也就是说,如果检测到BOM的存在,便不会再进行头部编码检测),那么将会对该文件进行页内头部编码检测,其实现逻辑在TextResourceDecoder:: checkForHeadCharset函数中。其处理逻辑如下:
    1.      文件开头是XML的声明
    a)        如果是XML声明,并且包含有encoding属性,那么更改当前解码器的编码格式,并且设置编码来源为EncodingFromXMLHeader
    b)       根据字符串“<?xml”占用的字节和顺序,确定编码为UTF16/UTF32的大端/小端编码
    2.      否则,检测meta标签中的charset字符串
    a)        如果是XML文件,则返回(Webkit中注释:在XHTML中http-equiv无效)
    b)       如果包含有meta标签,并且指定由某种编码格式,那么那么更改当前解码器的编码格式,并且设置编码来源为EncodingFromMetaTag
    PS: 检测文本前1024字节,直到遇到head中不被允许的标签为止,而不是遇到head的结束标签就停止(在head中允许嵌套的标签有如下几个:SCRIPT|STYLE|META|LINK|OBJECT|TITLE|BASE)。此外,忽略<title>, <script> 和<noscript>这样的标签。
    3.4  编码检测器
    使用编码检测器必须同时满足下面条件(shouldAutoDetect()):
    1.      m_usesEncodingDetector为真;对于HTML/XML文件,该条件是否为真,取决于settings是否设置为真;而对于CSS/JS,该条件总是为假
    2.      编码来源为DefaultEncoding,或者编码来源为EncodingFromParentFrame且线索编码不为空
    PS:shouldAutoDetect()函数的注释如下:
    //   We use the encoding detector in two cases:
    //   1. Encoding detector is turned ON and no other encoding source is
    //      available (that is, it's DefaultEncoding).
    //   2. Encoding detector is turned ON and the encoding is set to
    //      the encoding of the parent frame, which is also auto-detected.
    //   Note that condition #2 is NOT satisfied unless parent-child frame
    //   relationship is compliant to the same-origin policy. If they're from
    //   different domains, |m_source| would not be set to EncodingFromParentFrame
    //   in the first place.
    如果shouldAutoDetect()条件满足:
    1.      当前解码器的编码为日文
    a)        调用detectJapaneseEncoding函数检查是否需要设置具体的日文编码,并设置编码来源为AutoDetectedEncoding
    2.      否则,调用detectTextEncoding函数,并将线索编码作为参数传入;该函数以统计学的方法检测给定文本可能的编码格式。
    3.5  小结
    对于页内编码检测:
    1.      文件的BOM标记总是会被检测,优先级最高
    2.      CSS/HTML/XML的页内编码是在一定条件下才会被检测,条件是:
    a)        编码来源为DefaultEncoding
    b)       或者,编码来源为EncodingFromParentFrame
    3.      CSS/JS默认不允许使用编码检测器,HTML/XML在一定条件下允许使用
    a)        Settings被设置为允许使用编码检测器
    b)       编码来源为DefaultEncoding,或者编码来源为EncodingFromParentFrame且线索编码不为空
    4  总结
    Webkit编码选择优先级如下:
    1.      BOM标记
    2.      用户选择编码
    3.      HTTP响应头返回编码
    4.      页面内编码
    5.      编码检测器
    6.      父Frmae的编码

    7.      默认编码


    展开全文
  • 设置字符编码

    千次阅读 2017-06-06 15:54:12
    在JSP和Servlet中有几个地方都可以设置编码,各个编码的功能也不一样,本文将... JSP/Servlet都有的编码设置 1. request.setCharacterEncoding("UTF-8") 2. response.setCharacterEncoding("UTF-8") 3. respon
  • shapefile与字符集编码设置

    万次阅读 2014-02-13 13:38:33
    在 ArcGIS Desktop (ArcMap, ArcCatalog, and ArcToolbox) 中,有编码页转换功能(CODE PAGE CONVERSION),可以读写多种字符编码的 shapefile 和 dBASE 表。 在系统注册表中,编码页转换功能(CODE PAGE ...
  • 设置linux编码

    千次阅读 2017-02-09 21:50:03
    #查看当前的编码 [root@localhost ~]#locale LANG=c ...[root@localhost ~]echo $LANG c#修改linux编码 [root@localhost ~]export LANG="en_US.UTF-8"再打开包含中文的文本,就可以正常显示了(终端的编码已修改为...
  • 设置Oracle客户端的编码

    千次阅读 2016-12-09 11:42:47
    windows linux 环境下 oracle编码设置
  • ORACLE客户端的字符编码设置

    千次阅读 2011-11-18 15:44:48
    今天在利用PL/SQL DEVELOPER 往...上网google得知oralce字符编码设置和查询的一些方法,记录如下: 1. NLS_LANG 参数组成 NLS_LANG参数由以下部分组成: NLS_LANG=_. NLS_LANG各部分含义如下: LANGUAGE指
  • Linux设置中文乱码(设置编码格式)

    千次阅读 2019-03-30 11:30:09
    终端工具一般都是默认utf-8编码格式,如果终端设置utf-8还是乱码,问题就是Linux的编码格式有问题、 二、设置Linux编码格式 在.vimrc中添加如下代码(没有.vimrc就新建一个) vim ~/.vimrc set encoding=utf-8 f...
  • mysql 数据导入时的编码设置

    千次阅读 2015-07-15 13:38:38
    今天在做mysql数据导入时遇到编码错误,使用的命令如下:  c:\>mysql -uroot -pabc mydb 结果提示有编码错误,不能导入。后将这个sql文件放到navicat中执行,...1、将my.ini中添加clinet设置 [client] character-
  • SecureCrt设置字符编码

    千次阅读 2014-12-29 21:32:35
    1. SecureCRT设置字条编码 Option--Session Option--Appearance 示例设置为UTF8如下:   2. SecureCrt设置当前会话的编码 Option--Session Option --Terminal -- Log File OverWrite file 为...
  • Linux 之 设置编码格式

    千次阅读 2017-01-10 15:31:51
    环境变量 LANG 存储着系统当前的编码格式,可以输出它来看一下:echo $LANG 通过修改环境变量$LANG(language)来设置编码格式: export LANG=en_US.UTF-8 export LANG=zh_CN.UTF-8
  • Linux-oracle环境编码设置步骤

    千次阅读 2016-04-28 14:46:35
    在做项目的过程中,经常会出现因为编码格式不统一而导致程序执行失败。特别是在做日本项目的时候,更加需要注意。 在此,把之前的经验总结下,以便后面遇到同样的问题时有迹可循。 首先,思路是将服务器和...
  • IDEA中项目编码格式设置

    万次阅读 多人点赞 2018-01-31 18:22:32
    自从换成IntelliJ IDEA 之后各种设置就成了问题,这不,在跟另一家公司做对接的时候,他们说我这边的http接口返回...这还能忍,我果断的开始了我的编码设置之路。 首先看了ie与360上的编码格式,的确是GBK的,然后我搜
  • 在pycharm中设置utf-8编码自动创建

    千次阅读 2019-09-21 15:59:46
    在pycharm中设置utf-8编码 utf-8是支持国际化的编码方案。如果采用了utf-8编码,国外用户在浏览你的网站时,无论你采用何种语言都能够正常显示;反之如果你用了GB2313编码,当国外用户浏览你的中文站点时将会显示...
  • JSP中的编码设置、JSP页面乱码

    千次阅读 2018-09-03 15:23:44
    jsp页面编码: jsp文件本身的编码。 contentType:&amp;lt;%@ page contentType=&quot;text/html;charset=UTF-8&quot;%&amp;gt; web页面显示编码:jsp的输出流在浏览器中显示的编码。 html页
  • 一、设置新建常见文件的默认编码格式,也就是文件保存的格式。  在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致,即GBK。 在简体中文系统...
  • Linux系统的默认编码设置

    万次阅读 2011-08-07 23:57:03
    首先检查SecureCRT, 设置 Options->Global options->General->Default session->Edit Default Settings->Terminal-> Appearance->Character encoding, 选
  • 在安装Linux系统的时候如果选错了语言和编码设置的话是件很让人恼火的事情,如果你采用的是在Windows OS下的SSH工具远程登录Linux的话,这就是一个比较蛋疼的问题了,因为这个工具目前在对多种编码格式的支持上有...
  • 最近刚刚巧儿,连续碰到几个Shapfile中文乱码的问题,参照kikita博主在博客空间慕名ArcGIS中的博文《shapefile与字符集编码设置》,通过在注册表中导航到计算机 > HKEY_CURRENT_USER > Software > ESRI > Deskt
  • linux设置语言编码

    千次阅读 2013-11-07 10:22:48
     在这里面设置将对所有的用户设置有效。  需要对以上设置成功需要进行以下操作  1、source /etc/sysconfig/i18n  2、source /etc/profile  3、重启服务器
  • 一、设置新建常见文件的默认编码格式,也就是文件保存的格式。 在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致,即GBK。 在简体中文系统下,...
  • IDEA中项目统一编码格式设置

    千次阅读 2018-09-23 15:00:00
    统一UTF-8编码设置 第一处 File-settings-Editor-File Encodings 1 第二处 File-Other settings-Default settings 2 第三处 tomcat 3 3 第四处 修改idea bin目录下的两个配置文件,...
  • 在windows环境下,ADT 编译器默认编码方式GBK,一般设置默认为UTF-8,能更好的解决乱码问题,设置方式如下: window-preferences-workspace Java平台下不同编码方式的区别 几种常见的编码格式 为...
  • mysql如何设置默认编码方式

    千次阅读 2017-09-27 22:24:41
    安装MySQL之后修改编码方式 MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改...1、需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:>mysql -u ro

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 572,315
精华内容 228,926
关键字:

编码设置用户