RFC2152 UTF-7 中文

2023-05-16

RFC2152 UTF-7 中文
翻译:李静南
时间:2006-03-29
EMAIL:robin-fox@sohu.com
版权:可以用于非商业用途自由转载,但请保留本文档的翻译完整信息。译者保留
对本中文翻译文档的版权。
————————————————————————————————————

Network Working Group                                       D. Goldsmith
Request for Comments: 2152                          Apple Computer, Inc.
Obsoletes: RFC 1642                                             M. Davis
Category: Informational                                   Taligent, Inc.
                                                                May 1997


                          UTF-7
                邮件安全的Unicode转换编码

本备忘录状态

    本文为因特网社区提供信息。本文没有指定任何因特网标准。分发本文不受限
制。

摘要

    Unicode标准,2.0版本, 以及ISO/IEC 10646-1联合定义了一种字符集,它包
含了世界上大多数可书写的字符系统。(后文都直接用Unicode一词)

    事实上,因特网邮件(STD 11, RFC 822)目前所支持的仅仅是7-bit的ASCII字符
集。MIME(RFC 2045到2049)扩展了网络邮件以支持不同的媒体类型和字符集,也因
此能够在邮件信息里支持Unicode了。虽然它确实提供了随着时间而增加的字符集注
册的方法,但MIME既没有把Unicode定义为容许的字符集,也没有说明它要怎么编码。

    本文档描述了一种Unicode的转换编码,它只使用7-bit的ASCII字节,并且意图
在文件由US-ASCII表中字符组成的限定条件下,对人来说是易读的。还说明了在MIME
的内容中怎么使用这种转换编码(RFC 1641“在MIME中使用Unicode”)。

起因

    虽然存在着其他的Unicode转换格式,并且也足以在这样的环境下使用(最明显
的就是UTF-8,还有UTF-2 or UTF-FSS),但他们都有一个缺点,就是他们使用了
128-255这一范围对Unicode编码,超过了US-ASCII的范围。因此,在邮件环境中,
8位字节必须要被编码。这要求让文本经历两次连续的编码,让US-ASCII范围以外
的字符有一个显著的扩展,这使得非英文的使用者处于非常不利的地步。例如,
使用UTF-8和MIME中的Quoted-Printable内容编码方式一起处理,让US-ASCII字符
出现在一个字节里,但其他的字符可能需要9个字节。

概述

    UTF-7把Unicode字符编码为US-ASCII的字节,并且用替换序列编码超出范围
(0-127)的字符。为了这个目的,US-ASCII 表里的一个字符就要保留作为替换字符
使用。大多邮件网关和系统不能处理完整的US-ASCII字符集(例如那些基于EBCDIC的),
所以UTF-7包含了在US-ASCII用于编码的预留,以便所有的邮件系统都能兼容。UTF-7
应该一般用在7-bit传输的环境中,比如邮件。其他的环境中Unicode或者UTF-8还是
首选的。参见RFC 1641,“在MIME中使用Unicode”整体描述了在MIME中Unicode转换
编码的使用。

定义

    首先,定义Unicode:

    16-bit字符集,Unicode,由"Unicode标准,2.0版本"所定义。这套字符集与国际
标准组织的编码ISO/IEC 10646-1一致。 编码后形式为UCS-2;子集为300;实现等级
为3,包含对10646+的前7个修正。

    注:Unicode 2.0 还进一步说明了这些字符在ISO标准组织以外的使用和交互。事
       实上,一个有效的10646序列就是一个有效的Unicode序列,反之也是;Unicode
       协会提供对序列的解析,而ISO标准组织却一直没有。

    然后,定义一些US-ASCII字符子集:

      集合D:(直接字符)包含如下的字符(取自RFC1521,附录B,在RFC2045中不再
              出现了):
              大写字母A-Z,小写字母a-z,和10个数字0-9,和后面的9个特殊字符
             (注意:"+"和"-"遗漏了)


                字符     ASCII & Unicode值 (十进制)
                  '           39
                  (           40
                  )           41
                  ,           44
                  -           45
                  .           46
                  /           47
                  :           58
                  ?           63

      集合O: (可选的直接字符) 包含如下的字符: (注意 "/" 和 "~" 遗漏了):

                字符     ASCII & Unicode值 (十进制)
                  !           33
                  "           34
                  #           35
                  $           36
                  %           37
                  &           38
                  *           42
                  ;           59
                  <           60
                  =           61
                  >           62
                  @           64
                  [           91
                  ]           93
                  ^           94
                  _           95
                  '           96
                  {           123
                  |           124
                  }           125

    基本原理:有两个字符 "/" 和 "~" 被遗漏了是因为在ASCII表中他们经常被重新
             定义变量值

      集合B: (更改过的Base64) (RFC 2045)定义的Base64字母表中的字符,除了
              填充字符:"=" (十进制值为 61)。

 

    基本原理: 填充字符 "=" 被排除了是因为UTF-7被设计用来在报头字段中使用,
              就如RFC2047中的集合4。 因为RFC2047编码中唯一易读的编码就是"Q",
              (基于RFC 2045's Quoted Printable),所以"="不适合使用(没有很多的
              转义序列)。这很不幸,但是却不可避免。其实,"=" 字符在UTF-7中也
              可以作为转义字符使用,如果不是使用"+"。
  
    注:所有US-ASCII在Unicode中都是用同样的值,补0扩展到16 bits。


UTF-7 定义:

    一个UTF-7流用如下方式使用7-bit US-ASCII字节表示16-bit Unicode字符:

   规则1:(直接编码) 上面的集合D中的Unicode字符可以直接的编码为ASCII的等
          价物。集合O中的字符可以有随意的直接编码为ASCII的等价物,但要记
          得其中的很多的字符在报头字段是不合法的,或者不能正确的穿过邮件
          网关。

   规则2:(Unicode替换编码) 通过在前面加上转换字符"+"(US-ASCII字符十进制
          值为43),任何一个Unicode序列都可以使用集合B中的字符编码。"+"意
          味着后面的字节将被作为更改过的BASE64字母表中的元素解析,直到遇
          到一个不是字母表中的字符为止。这些字符中包含控制字符,比如回车
          和换行;因此,一个Unicode转换序列总是在一行上结束。作为一个特殊
          的情形,如果序列结束于一个"-"字符(US-ASCII值45),那么那个字符就
          要被关注;其他的结束字符不用关心,而且可以正常处理。

   注意:如果跟在转换字符后的第一个字符就是"-",那么一个多余的必须被加上,
         以便结束转换序列,所以真正的"-"不是它关心的。

  基本原理:一个结束字符在如下的情形是必须的:在更改的base64序列的下一个
            字符是集合B中的部分,或者本身就是一个结束字符。通过界定编码的
            序列也可以增强可读性。作为特定情形,序列"+-"可以用来编码字符"+"。
            一个"+"字符之后立即跟着的字符若不是集合B的成员或者"-",就是一
            个形式有误的序列。
               

     
    对Unicode使用更改的base64编码时候,可以首先转换Unicode的16bit的数量值
    为一个字节流。通过把成对中的一个当作单独的值以后,就会转换为字节对。
    奇数个字节的的文本是错误的形式,ISO1646 字符超过可设定地址范围的部分
    转换为字节对后也无法编码。

    基本原理:ISO/IEC 10646-1:1993(E)说明了当UCS2形式被字节流序列化时,哪
              个字节在前面。选定一种用来发送的规范格式,在一般网络应用中也
              是遵循的。
       
    基本原理:ISO 10646和Unicode标准中代码点定位的策略是一个同步一致的字
              符表。如果字节对超过了ISO10646可寻址范围,就无法对代码点定
              位了。

    然后:对字节流进行编码时使用了"更改的base64编码"算法(定义于RFC 2045),
    更改中去掉了填充字符"="。在编码时候,增加了代替的"0 bits"以便填充base64
    编码字符的边界。在解码时,在"更改的base64编码"序列最后的一些bits,如
    果不能组成一个完整的 16-bit的Unicode字符,那么就会被丢弃。如果丢弃的
    bits不是0,那么这个编码序列就是有格式错误的。

    基本原理:填充字符"="在使用"更改的Base64编码"进行编码的时候没有使用,
              因为就象上文提及的,它在"Q内容传输编码"中作为一个转义字符
              使用是有冲突的。

   规则3: 空格 (十进制 32),tab (十进制 9),回车(十进制 13),和换行(十
           进制 10)字符可以直接使用ASCII等价字符表示。事实上,应该注意到
           MIME传输编码也有使用这些字符的规则。如果使用并不遵循RFC 822的
           限制,必须要使用MIME编码而不是7bit或者8bit的一些编码,比如
           quoted-printable,binary,或者base64。
 
      鉴于给定的一组规则,Unicode字符可以经由规则1或者规则3编码,一个字符
      占用一字节;然后其他的Unicode字符用规则2编码,一个字符占用平均
      (2 + 2/3)个字节,加上一个转换开关字节用来进入"更改的base64编码",
      加一个可选的转换跳出字节。

      例如:Unicode序列 "A<NOT IDENTICAL TO><ALPHA>."
      (十进制: 0041,2262,0391,002E) 可以被编码如下:

            A+ImIDkQ.

      例如:Unicode序列 "Hi Mom -<WHITE SMILING FACE>-!"
      (十进制: 0048, 0069, 0020, 004D, 006F, 006D, 0020, 002D, 263A,
       002D, 0021) 可以被编码如下:

            Hi Mom -+Jjo--!

      例如:Unicode序列  用汉语表示日文 "nihongo"
      (十进制: 65E5,672C,8A9E) 可以被编码如下:

            +ZeVnLIqe-

在MIME中使用UTF-7字符集

    UTF-7字符集对邮件传输是安全的,因此可以应用于MIME中任何内容的编码(除
    非出现了对行长度和行中断的强制约束)。特定的,7-bit的编码用于主体,
    "Q内容编码"用于报头的情况也可以使用。MIME字符集的标签是UTF-7,这一点
    对大于等于2.0版本的Unicode很重要。

      例子: 这是一个MIME消息的片段 ,包含了一段Unicode序列:
      "Hi Mom <WHITE SMILING FACE>!"
           (十进制 0048,0069, 0020, 004D, 006F, 006D, 0020, 263A, 0021)。

      Content-Type: text/plain; charset=UTF-7

      Hi Mom +Jjo-!

      例子: 这是一个MIME消息的片段 ,
      包含了一段用汉语表示日语词"nihongo"的Unicode序列:
      (十进制: 65E5, 672C, 8A9E)。

      Content-Type: text/plain; charset=UTF-7

      +ZeVnLIqe-

      例子:  这是一个MIME消息的片段 ,包含了一段Unicode序列:
       "A<NOT IDENTICAL TO><ALPHA>."
       (十进制: 0041, 2262, 0391, 002E)。

      Content-Type: text/plain; charset=utf-7

      A+ImIDkQ.

      例子:  这是一个MIME消息的片段 ,包含了一段Unicode序列:
       "Item 3 is <POUND SIGN>1."
        (十进制 0049, 0074, 0065, 006D, 0020, 0033, 0020, 0069,
        0073, 0020, 00A3, 0031, 002E)。

      Content-Type: text/plain; charset=UTF-7

      Item 3 is +AKM-1.

    注意: 为了和"可能不支持Unicode与MIME的系统"达到最好的互用性,在准备
    邮件传输正文的时候,"行中断"应该遵守网络惯例。这意味着行应该很短而且
    要使用SMTP的CRLF来标记结束。Unicode的行分隔符(十进制 2028)和段分隔符
    (十进制 2029)应该被替换为SMTP的行中断。理想的情况,这应该由一个理解
    Unicode的用户代理透明的处理。
  
    这样的准备也不是绝对必要的,因为UTF-7和适当的MIME编码可以在不遵守网
    络惯例的情况下处理正文,但是对于没有Unicode或者MIME的系统的可读性就
    会被削弱了。关于邮件协同工作能力问题的讨论可以参见RFC2045。
  
    在UTF-7转换序列中行是不可以被打断的,因为这样的序列不可以跨越行中断。
    因此,UTF-7编码可以放在行中断后面。如果一行含有转换后会很长的序列,
    可以使用MIME中的编码来处理正文,比如 Quoted Printable。另一个可行性
    就是同时执行行中断和UTF-7编码,这样包含转换序列的行就已经符合长度限
    制了。

讨论:

    在本节中,我们将引入UTF-7编码,它反对选择现有的Unicode转换编码(例如
    UTF-8)和MIME编码一起使用。在讨论之前,有必要先列举一些假设,这些假设
    有关于典型自然语言文本串中字符出现的频率,而这些频率可以用来评估典型
    存储的需求:
  

   1. 多数西欧语言使用大概7/8的US-ASCII字符和1/8的打丁字符(ISO-8859-1)。

   2. 多数基于非罗马字母表的语言(比如希腊)使用大约1/6的ASCII字符(因为空格
      也算是7bit的),其他的来源于他他们自己的字母表。

   3. 东亚基于表意字表的语言(包括日文)基本使用他们自己的字符表,Han或者CJK。

   4. 非直接编码的标点字符的出现次数不足以影响结果。

    注意: 当前的8bit标准,比如ISO-8859-x,要求使用内容传输编码。为了和后
    续的讨论对比,把代价列举如下,(注意:很多其中的数字只是接近的,因为他
    们依赖文本确切的组成形式):

    Base64中的8859-x

      文本类型          平均字节数/字符
      所有                     1.33

    Quoted Printable中的8859-x

      文本类型          平均字节数/字符
      US-ASCII                 1
      西欧                     1.25
      其他                     2.67

    注意:使用base64编码的Unicode平均一个字符占用了2.67个字节。为了对比,
    我们看一下UTF-8和UTF-7在Base64和Quoted中的情况。还要指出的是:一个较
    长的字符串有固定的经常性开销,大约为 1/n,n是指编码后字节串的长度。

    UTF-8在 Base64中

      文本类型          平均字节数/字符
      US-ASCII                 1.33
      西欧                     1.5
      一些字母表的             2.44
      其他                     4

 

   UTF-8在Quoted Printable中

      文本类型         平均字节数/字符
      US-ASCII                 1
      西欧                     1.63
      一些字母表的             5.17
      其他                     7-9

   UTF-7

      文本类型          平均字节数/字符
      多数 US-ASCII            1
      西欧                     1.5
      其他                     2.67+2/n

    我们会发现UTF-8在Quoted Printable选项中是不可行的,因为在文本中有太多
    的除了西欧语言外的其他的语言。当只有当文本中大多是ASCII或者拉丁数字字
    符,偶尔有其他的字符散布的时候,这样编码才是可行的。我们将首选介绍一
    种编码能很好的适用于所有用户。我们还会发现UTF-8与base64编码的使用者中,
    有大量的非西欧用户。即便是里面有很多的ASCII字符,因为没有很好的可读性,
    这样的编码也不是十分适用。基于UTF-7的编码可以给出很好的结果,并且对
    ASCII文本有很好的可读性。
 

    UTF-7 给出的结果挑战了ISO-8859-x,而且适用于所有的Unicode字符。
    我想,这证明了引入一种新的Unicode转换编码是正确。
  
    UTF-7作为一种可选的方案,但是,因为multipart/mixed内容类型忽略了行中断
    的问题,也可能在使用现有的MIME机制的时候会和其他的Unicode字符集产生混乱。
    (感谢Nathaniel Borenstein提了这个建议),例如:(重新说一下前面的例子)

      Content-type: multipart/mixed; boundary=foo
      Content-Disposition: inline

      --foo
      Content-type: text/plain; charset=us-ascii

      Hi Mom
      --foo
      Content-type: text/plain; charset=UNICODE-2-0
      Content-transfer-encoding: base64

      Jjo=
      --foo
      Content-type: text/plain; charset=us-ascii

      !
      --foo--

    理论上, 这里去掉了在消息体里对UTF-7的需求。(多部分类型不可以在报头字
    段里使用)事实上,我们发现使用Unicode字符集变得更为广泛了,间断使用一
    些特殊的Unicode字符(例如钱和数学符号)的情况会出现,并且文本里还会包含
    很多小块的其他的语句,比如西里尔的,希腊的和东亚的语言。(罗马的文字都
    已经能被MIME字符集充分处理了)虽然多部分技术对于大块用于交互的文本来说
    工作的很好,我们还是觉得它不能充分的支持刚刚讨论的应用类型,所以我们认
    为引入UTF-7是合理的。

总结:

    UTF-7编码方式使得Unicode字符集能在US-ASCII的7-bit范围中编码。对于一些
    Unicode序列,如果含有相对较长的US-ASCII字符串,中间夹杂了单个的Unicode
    字符或者Unicode串,这种编码是高效的。因为它容许没有Unicode支持的系统直
    接阅读US-ASCII的部分。UTF-7仅仅应该用在7-bit传输的时候,比如邮件。在其
    他的环境下,Unicode 或者UTF-8应该是首选的。
 
致谢:

   对如下人的贡献,评论和建议表示感谢,如果因为疏忽而遗漏了某一位,
   也不是故意的!

         Glenn Adams
         Harald T. Alvestrand
         Nathaniel Borenstein
         Lee Collins
         Jim Conklin
         Dave Crocker
         Steve Dorner
         Dana S. Emery
         Ned Freed
         Kari E. Hurtta
         John H. Jenkins
         John C. Klensin
         Valdis Kletnieks
         Keith Moore
         Masataka Ohta
         Einar Stefferud
         Erik M. van der Poel

 

附录 A -- 例子:

    这里有个更大的例子,是从一个BIG5编码的文档里拿来的。只是精简了一些。
    这里有两个版本,第一个使用了可选的"O"字符集(这可能会造成不能通过一些
    邮件网关),第二个没有。

   Content-type: text/plain; charset=utf-7

   下面就是全都是中文的一端节选 (+itaKng-)。

   原文是这样的:

   "The sayings of Confucius," James R. Ware, trans.  +U/BTFw-:
   +ZYeB9FH6ckh5Pg-, 1980.  (中文文本做了英文转换)

   +Vttm+E6UfZM-, +W4tRQ066bOg-, +UxdOrA-:  +Ti1XC2b4Xpc-, 1990.

   "The Chinese Classics with a Translation, Critical and Exegetical
   Notes, Prolegomena, and Copius Indexes," James Legge, trans., Taipei:
   Southern Materials Center Publishing, Inc., 1991. 
   (中文文本做了英文翻译)

   分别做了个BIG5和GB两个版本:

   本文中没有包含BIG5或者GB的所有字符。缺失的字符已经使用它们的Unicode/ISO
   代码点指示出来了。"U+-" 后面跟着四个十六进制指定一个Unicode/10646代码
   (例如:U+-9F08)。这对小规模的BIG5和GB使用的问题,不是一个好的解决方案;
   但是这种解决方案的表现,对我个人而言是很
   满意的。

   (缺失了…)

    +XrdxmVtXUXg-

   (缺失了…)

   John H. Jenkins +TpVPXGBG- jenkins@apple.com 5 January 1993
   (缺失了…)

   Content-type: text/plain; charset=utf-7

   下面就是全都是中文的一端节选(+itaKng-).
   原文是这样的:

   +ACI-The sayings of Confucius,+ACI- James R. Ware, trans.  +U/BTFw-:
   +ZYeB9FH6ckh5Pg-, 1980.  (中文做了英文转换)

   +Vttm+E6UfZM-, +W4tRQ066bOg-, +UxdOrA-:  +Ti1XC2b4Xpc-, 1990.

   +ACI-The Chinese Classics with a Translation, Critical and Exegetical
   Notes, Prolegomena, and Copius Indexes,+ACI- James Legge, trans.,
   Taipei:  Southern Materials Center Publishing, Inc., 1991.
    (中文文本做了英文转换)

   分别做了个BIG5和GB两个版本:

   本文中没有包含BIG5或者GB的所有字符。缺失的字符已经使用它们的
   Unicode/ISO代码点指示出来了。+ACI-U+-+ACI- 后面跟着四个十六进制指定一
   个Unicode/10646代码(例如:U+-9F08)。这对小规模的BIG5和GB(+ADs-)使用的
   问题,不是一个好的解决方案;但是这种解决方案的表现,对我个人而言是很
   满意的。

   (缺失了…)
  
    +XrdxmVtXUXg-
   (缺失了…)

   John H. Jenkins +TpVPXGBG- jenkins+AEA-apple.com 5 January 1993
   (缺失了…)

 


对安全的考虑:

   本文没有讨论安全问题。

参考:

[UNICODE 2.0]  "The Unicode Standard, Version 2.0", The Unicode
               Consortium, Addison-Wesley, 1996. ISBN 0-201-48345-9.

[ISO 10646]    ISO/IEC 10646-1:1993(E) Information Technology--Universal
               Multiple-octet Coded Character Set (UCS). See also
               amendments 1 through 7, plus editorial corrections.

[RFC-1641]     Goldsmith, D., and M. Davis, "Using Unicode with MIME",
               RFC 1641, Taligent, Inc., July 1994.

[US-ASCII]     Coded Character Set--7-bit American Standard Code for
               Information Interchange, ANSI X3.4-1986.

[ISO-8859]     Information Processing -- 8-bit Single-Byte Coded Graphic
               Character Sets -- Part 1: Latin Alphabet No. 1, ISO
               8859-1:1987.  Part 2: Latin alphabet No.  2, ISO 8859-2,
               1987.  Part 3: Latin alphabet No. 3, ISO 8859-3, 1988.
               Part 4: Latin alphabet No.  4, ISO 8859-4, 1988.  Part 5:
               Latin/Cyrillic alphabet, ISO 8859-5, 1988.  Part 6:
               Latin/Arabic alphabet, ISO 8859-6, 1987.  Part 7:
               Latin/Greek alphabet, ISO 8859-7, 1987.  Part 8:
               Latin/Hebrew alphabet, ISO 8859-8, 1988.  Part 9: Latin
               alphabet No. 5, ISO 8859-9, 1990.

[RFC822]       Crocker, D., "Standard for the Format of ARPA Internet
               Text Messages", STD 11, RFC 822, UDEL, August 1982.

[MIME]         Borenstein N., N. Freed, K. Moore, J. Klensin, and J.
               Postel, "MIME (Multipurpose Internet Mail Extensions)
               Parts One through Five", RFC 2045, 2046, 2047, 2048, and
               2049, November 1996.

作者的地址:

   David Goldsmith
   Apple Computer, Inc.
   2 Infinite Loop, MS: 302-2IS
   Cupertino, CA 95014

   Phone: 408-974-1957
   Fax: 408-862-4566
   EMail: goldsmith@apple.com

   Mark Davis
   Taligent, Inc.
   10201 N. DeAnza Blvd.
   Cupertino, CA 95014-2233

   Phone: 408-777-5116
   Fax: 408-777-5081
   EMail: mark_davis@taligent.com

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RFC2152 UTF-7 中文 的相关文章

  • utf-8转换到utf-16的转换过程你懂吗?

    人生自是有情痴 xff0c 此恨不关风与月 唐代元稹 离思 从UTF 8编码的文件中读取文本并将其存储到Java的String对象中 xff0c 涉及到从字节序列到Unicode码点 xff0c 再到UTF 16编码的转换 以下是详细的步骤
  • VS2017修改文件编码格式为utf-8

    对于国内用户来说 xff0c 大多设置Windows操作系统语言为简体中文 编码为GBK或GB2312 xff0c 由此导致Visual Studio 2017默认采用GBK GB2312编码格式 xff0c 其创建的项目文件 cpp js
  • Linux 文本文件编码GBK转UTF-8

    Linux服务器中调用Oracle卸数工具sqluldr2 xff0c 数据库编码为GBK 需要卸UTF 8的数据文件出来 xff0c 如果某个字段为中文 xff0c 因为GBK为两个字节 xff0c UTF 8为三个字节 xff0c 同样
  • 解决Excel打开UTF-8编码CSV文件乱码的问题

    最近在用QT读写CSV文件 xff0c 发现将数据写入到CSV文件中 xff0c 使用记事本打开文件是正常的 xff0c 使用Excel打开 xff0c 中文是乱码的 xff0c 下面把原因和解决方法记录一下 问题产生的原因 为什么exce
  • RFC2152 UTF-7 中文

    RFC2152 UTF 7 中文 翻译 xff1a 李静南 时间 xff1a 2006 03 29 EMAIL xff1a robin fox 64 sohu com 版权 xff1a 可以用于非商业用途自由转载 xff0c 但请保留本文档
  • GB2132转UTF-8

    背景 单片机端常用的中文显示字符集是GB2312 相对于UTF 8表示中文时更节省空间 但是Linux端为了通用及兼容性常采用UTF 8作为字符编码 为了保持编码的的统一 网络通信时单片机内部将GB2312转为UTF 8发送给Linux 于
  • C语言实现GB2312和UTF8之间的编码转换

    C语言实现GB2312和UTF8之间的编码转换 GB2312 GB2312编码适用于汉字处理 汉字通信等系统之间的信息交换 基本集共收入汉字6763个和非汉字图形字符682个 GB2312中对所收汉字进行了 分区 处理 字符集分成94个区
  • 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    尊重作者 支持原创 如需转载 请附上原地址 https blog csdn net libaineu2004 article details 19245205 一 Qt Creator环境设置 1 cpp或h文件从window上传到Ubun
  • Android WebView 带有乱码的 UTF-8 字符。

    我在 android 应用程序中使用一些 webview 但无法使它们以 utf 8 编码显示 如果使用这个 我将看不到我的斯堪的纳维亚角色 mWebView loadUrl file android asset om html 如果尝试这
  • utf8 表示为普通文本

    text xd0 xa2 xd0 xb0 xd0 xb9 xd0 xbd xd0 xb0 text iconv UTF 8 UTF 8 IGNORE text var dump text good text file get content
  • UnicodeDecodeError:“ascii”编解码器无法解码位置 47 中的字节 0x92:序号不在范围内(128)

    我正在尝试使用 Python 在 StringIO 对象中写入数据 然后最终使用 psycopg2 的 copy from 函数将此数据加载到 postgres 数据库中 首先 当我这样做时 copy from 抛出错误 错误 编码 UTF
  • 将键盘表情符号转换为自定义 png,反之亦然

    这是一个直接而简单的问题 我怎样才能实现这两件事 FIRST 输入 嘿我在微笑 输出 hey I m smiling span class smile span 反之亦然 SECOND 输入 嘿我在微笑 smile 输出 嘿我在微笑 现在我
  • 使用 FileReader 的 readAsBinaryString 和 readAsText 之间的区别

    举个例子 当我读到 字符时 u03C0 从使用 FileReader API 的文件中 当我使用以下命令读取它时 我会得到 pi 字符FileReader readAsText blob 这是预期的 但是当我使用FileReader rea
  • javax 邮件:UTF-8 编码问题

    我已经看到了几个与此相关的问题 但没有一个能解决我的问题 我有一封带有 pdf 附件的中文电子邮件 所有文本在包含在多部分电子邮件中之前都是有效的 UTF 8 Problem 电子邮件中的文本到达收件人时是垃圾字符 电子邮件标头显示其编码不
  • 如何在十六进制 NCR 和 UTF-8 代码单元之间进行转换?

    示例 大红圈 表情符号 可以使用 HTML 显示 x1f534 但是 如果我创建一个包含相同表情符号的文本文件 使用 UTF 8 编码保存该文件 然后使用十六进制编辑器检查它 我可以看到表情符号是用这四个字节表示的 F0 9F 94 B4
  • 控制配置设置 Apache Spark UTF 编码以写入为 saveAsTextFile

    那么如何告诉spark在使用时使用哪种UTFsaveAsTextFile path 当然 如果知道所有字符串都是 UTF 8 那么它将节省 2 倍的磁盘空间 假设像java一样默认UTF是16 saveAsTextFile实际上使用Text
  • <0xEF,0xBB,0xBF> 字符出现在文件中。如何去除它们?

    我正在压缩 JavaScript 文件 压缩器抱怨我的文件有 他们身上的性格 如何搜索这些字符并将其删除 您可以使用轻松删除它们vim 步骤如下 1 在终端中 使用 vim 打开文件 vim file name 2 删除所有BOM http
  • 使用c++和qt时的重音问题

    我正在用西班牙语编写一个程序 我想告诉用户文件已加载 用西班牙语来说是 ui gt teLog gt append Se carg el archivo filename 然而 西班牙语部分的输出为 归档文件 我知道问题在于编码 我想我需要
  • 仅在行尾显示为菱形问号的字符(Python>文本)

    我正在开发一个 Python 文件 该文件输入一个包含日语字符 UTF 8 的文本文件 获取一些文本 并将其写入一个新的 UTF 8 文本文件 我遇到的问题是 由于某种原因 每当日语字符 出现在原始输入文件中的行尾时 它就会在输出文件中显示
  • 将 UTF-16 转换为 UTF-8

    我目前使用 VC 2008 MFC 由于 PostgreSQL 不支持 UTF 16 Windows 使用的 Unicode 编码 我需要在存储之前将字符串从 UTF 16 转换为 UTF 8 这是我的代码片段 demo cpp Defin

随机推荐

  • VIm自动生成python的文件头

    VIm自动生成python的文件头 我实现的效果如图所示 xff1a 思路是在vimrc配置文件中写相关的函数 xff0c 代码在下面贴出 按 wq保存退出以后 xff0c 会自动更新上次修改时间 34 新建py文件时插入文件头 autoc
  • 使用Dokcer配置Tensorflow-1.15环境并使用VSCode开发

    使用Dokcer配置Tensorflow 1 15环境 目前学术界大部分深度学习的开源代码都是基于Pytorch的 xff0c 但还有少部分工作或者以前的工作是基于Tensorflow 1 x的 xff0c 由于tensorflow的版本和
  • 使用VNC可视化Docker容器

    使用VNC可视化Docker容器 0 前言环境 xff1a 1 容器端配置1 1 启动Docker容器1 2 安装x111 3 安装桌面环境1 4 安装tightvncserver 2 配置VNC Server2 1 首先停止刚刚新建的虚拟
  • STM32 串口ISP下载方式解读

    xfeff xfeff http blog sina com cn s blog b09739ab0102v4rm html Flash Loader Demonstrator 下 载工具的安装 1 xff0e 硬件的连接和设置 串口ISP
  • with异常处理

    class A 39 39 39 此类的对象可以用 xff57 xff49 xff54 xff48 语句进行管理 39 39 39 def enter self print 34 已经进入with语句 34 return self def
  • telegram android 源码分析 (一)自动设置代理

    比如自动设置mtproxy代理 xff0c 冗长的代码我们怎么去找 xff1f 1 xff09 首先我们发现点代理链接能弹对话框 xff0c 们可以在strings xml中搜索得到 xff1a lt string name 61 34 U
  • NS3 的 ipv4-static-routing-test-suite 源码分析

    下面进行源码注释 xff1a End to end tests for Ipv4 static routing include 34 ns3 boolean h 34 include 34 ns3 config h 34 include 3
  • c语言向上取整计算方法

    用整数N 除以 M xff0c 要求向上取整数 1 xff09 int n 61 N 43 M 1 M xff1b 简化后就是 xff1a 2 xff09 int n 61 N 1 M 43 1 xff1b 最笨的办法 3 int n 61
  • 比std::qsort还快的快速排序(1千万整数1.7秒)——(快速排序栈溢出与递归优化)

    前几天发现老外的开源项目中事件队列中用的就是std qsort排序 xff0c 后续插入时候使用了堆方式 快速排序实际应用中是比堆排序要快的 xff0c 这主要是因为硬件层次会对数据执行高速缓存 xff0c 数据使用一二三级高速缓存比访问内
  • C#使用ProtoBuf

    1 Google ProtoBuf 经过测试 xff0c protobuf比json存储效率还是要高 xff0c 即时号称最快的fastjson也没有protobuf快 xff0c 这里为了使用 c 做一个客户端兼容 xff0c 所以也需要
  • 多线程如何实现高性能计数器(无锁)

    多线程协作免不了使用计数器 xff0c 通常的代码 xff0c c 43 43 一般会使用锁 xff0c 或者原子变量操作 xff1a std mutex mutexCounter int count void add std lock g
  • ubuntu18/20 下如何生成core文件

    ubuntu18 20 下如何生成core文件 一 设置 原理 xff1a https blog csdn net Sunnyside article details 118439302 原来在ubuntu14 ubuntu16上只需要一步
  • c++的字节序与符号位的问题

    看这样一道题 xff1a include lt stdio h gt int main void int w h int i 61 0xa1b2c3d4 char p 61 char amp i for int j 61 0 j lt 4
  • docker镜像之带vnc的ubuntu

    docker镜像 之 带vnc图形界面ubuntu 前言 xff1a 为了在图形界面中使用firefox xff0c 需要找一个带rdp或者vnc的ubuntu xff0c 最好是gnome的界面 xff0c 折腾了3天 xff0c 终于找
  • STM32中,关于中断函数调用全局变量的问题

    xfeff xfeff https blog csdn net leo liu006 article details 79334905 首先是问题的描述 xff1a 硬件单片机型号 xff0c STM32F103VET6 xff0c IDE
  • python使用selenium以及selenium-wire做质量与性能检测

    python天生就是适合用来做爬虫 xff0c 结合selenium真是如虎添翼 xff1b 1 安装库 pip install selenium pip install selenium wire 2 xff09 添加驱动 xff0c 比
  • 编写http workshop脚本从网页缓存里解析音乐

    前一篇文章 编写http workshop脚本从网站下载音乐 示范了如何使用HttpClient访问API 以及Json数据的解析 今天我们通过解析一个网页展示如何使用内置的LibXml2的功能解析HTML 提取我们关心的内容 这里随便搜了
  • pytorch环境搭建若干

    备注 xff1a 不要使用python3 11不支持 xff0c pip会说找不到合适的版本 xff1b python官网不提供旧版的下载了 xff0c 说是win7以后无法使用 xff0c 都是扯淡 xff0c 有其他地方可以下载pyth
  • ffmpeg常用方法

    FFmpeg 是一款开源的音视频处理工具 xff0c 可以处理各种格式的音视频文件 xff0c 并且可以进行格式转换 剪切 合并 添加水印等多种操作 下面是 FFmpeg 的一些常用命令及其用法 xff1a 视频转码 将一个视频文件转换为另
  • RFC2152 UTF-7 中文

    RFC2152 UTF 7 中文 翻译 xff1a 李静南 时间 xff1a 2006 03 29 EMAIL xff1a robin fox 64 sohu com 版权 xff1a 可以用于非商业用途自由转载 xff0c 但请保留本文档