精华内容
下载资源
问答
  • UTF7 编码及解码工具

    热门讨论 2011-04-24 20:20:54
    UTF7 编码及解码工具 用于XSS方面
  • UTF-7编码

    2016-11-27 13:18:00
    目录 1 编码1 2 编码代码(C++)2 3 解码代码(C++)4 4 测试代码(VC++)7 ...UTF-7编码的规则及特点为: ...1)UTF16小于等于 0x7F 的字符,采用ASCII编码;...3)UTF-7编码后,所有字符均小于...

     

    1 编码    1

    2 编码代码(C++    2

    3 解码代码(C++    4

    4 测试代码(VC++    7

     

     

    1 编码

    UTF-7编码的规则及特点为:

    1UTF16小于等于 0x7F 的字符,采用ASCII编码;

    2UTF16大于0x7F的字符,采用Base64编码,然后在首尾分别加上+-

    3UTF-7编码后,所有字符均小于等于 0x7F

    如字符串"A编码示例bC+123"的UTF-7编码为字符串"A+fxZ4AXk6T4s-bC+-123"。"+fxZ4AXk6T4s-"中的fxZ4AXk6T4s是"编码示例"的Base64编码;"+-"表示字符+;其余的保持不变。

    以"编"为例,对Base64编码进行说明:

    内容

    字符串

    7F 16

    UTF-16编码,高字节在前,16进制

    0111 1111 0001 0110

    UTF-16编码,高字节在前,2进制

    011111 110001 011000

    分组,6位一组,末尾补两个0

    31 49 24

    10进制

    f x Y

    根据10进制查下面的Base64编码表

    下表是Base64编码表。

    个位

    十位

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    0

    A

    B

    C

    D

    E

    F

    G

    H

    I

    J

    1

    K

    L

    M

    N

    O

    P

    Q

    R

    S

    T

    2

    U

    V

    W

    X

    Y

    Z

    a

    b

    c

    d

    3

    e

    f

    g

    h

    i

    j

    k

    l

    m

    n

    4

    o

    p

    q

    r

    s

    t

    u

    v

    w

    x

    5

    y

    z

    0

    1

    2

    3

    4

    5

    6

    7

    6

    8

    9

    +

    /

               

    上面"编"的Base64编码是"fxY",为什么"编码示例"的Base64编码是"fxZ4AXk6T4s"呢?因为fxZ中的Z既包含了"编"的编码信息,又包含了"码"的编码信息。这是UTF-7编码最复杂的地方。

    2 编码代码(C++

    //Base64 编码字符串

    const static char* s_Base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

     

    static void UTF16to7(std::string&s7,int&n,unsigned short code[8])

    {

    switch(n)

    {

    case 1://连续 1 个字符大于 7F

    n = 3; //3 code[]

    break;

    case 2://连续 2 个字符大于 7F

    n = 6; //6 code[]

    break;

    case 3://连续 3 个字符大于 7F

    n = 8; //8 code[]

    break;

    default:

    n = 0;

    }

    if(n)

    {

    for(int i = 0;i < n;++i)

    {

    s7 += s_Base64Table[code[i]];

    }

    n = 0;

    }

    }

     

    /***************************************************************\

    UTF-16 字符串转换为 UTF-7 字符串

    pUTF16 [in] UTF-16 字符串首地址

    nBytes [in] UTF-16 字符串字节数,即字符数 * 2

    bLE [in] UTF-16 是否低位字节在前

    返回:UTF-7 字符串

    \***************************************************************/

    std::string UTF16toUTF7(const void*pUTF16,unsigned long nBytes,bool bLE)

    {

    std::string s7;

    if(pUTF16 && nBytes >= 2)

    {

    unsigned char* p16 = (unsigned char*)pUTF16;

    unsigned short u16 = 0;

    bool bCode = false; //是否正在编码

    //编码的第几个字符 123123……

    int n = 0;

    unsigned short code[8]; //编码的内容暂时存入此数组

     

    for(unsigned long i = 1;i < nBytes;i += 2)

    {

    //计算当前字符 u16

    if(bLE)

    {//低位字节在前

    u16 = p16[i - 1] | (p16[i] << 8);

    }

    else

    {//高位字节在前

    u16 = (p16[i - 1] << 8) | p16[i];

    }

    if(u16 <= 0x7F)

    {//当前字符小于等于 7F

    if(bCode)

    {

    if(n)

    {

    UTF16to7(s7,n,code);

    }

    s7 += '-';

    bCode = false; //标记未在编码

    }

    s7 += (char)u16;

    if(u16 == '+')

    {

    s7 += '-';

    }

    }

    else

    {//当前字符大于 7F

    switch(++n)

    {

    case 1: //连续 1 个字符大于 7F

    if(!bCode)

    {//编码的第一个字符

    s7 += '+';

    }

    code[0] = u16 >> 10;

    code[1] = (u16 >> 4) & 63;

    code[2] = (u16 << 2) & 63;

    break;

    case 2: //连续 2 个字符大于 7F

    code[2] |= u16 >> 14;

    code[3] = (u16 >> 8) & 63;

    code[4] = (u16 >> 2) & 63;

    code[5] = (u16 << 4) & 63;

    break;

    case 3: //连续 3 个字符大于 7F

    code[5] |= u16 >> 12;

    code[6] = (u16 >> 6) & 63;

    code[7] = u16 & 63;

    //每编码 3 个字符,将 code[8] 的内容加入 s7。同时 n 重新计数

    UTF16to7(s7,n,code);

    break;

    }

    bCode = true; //标记正在编码

    }

    }

    if(bCode)

    {

    if(n)

    {

    UTF16to7(s7,n,code);

    }

    s7 += '-';

    }

    }

    return s7;

    }

    3 解码代码(C++

    //判断某个字符是否为 Base64 编码,出错返回 0xFF

    static char IsBase64Char(char c)

    {

    if(c)

    {

    const char*pFind = strchr(s_Base64Table,c);

    if(pFind)

    {

    return pFind - s_Base64Table;

    }

    }

    return '\xFF';

    }

     

    static void UTF7to16(std::string&s16,unsigned short c,bool bLE)

    {

    if(bLE)

    {//低位字节在前

    s16 += (char)c;

    s16 += (char)(c >> 8);

    }

    else

    {//高位字节在前

    s16 += (char)(c >> 8);

    s16 += (char)c;

    }

    }

     

    /***************************************************************\

    UTF-7 字符串转换为 UTF-16 字符串

    pUTF7 [in] UTF-7 字符串首地址

    nBytes [in] UTF-7 字符串字节数,即字符数 * 2

    bLE [in] UTF-16 是否低位字节在前

    返回:UTF-16 字符串

    \***************************************************************/

    std::string UTF7toUTF16(const void*pUTF7

    ,unsigned long nBytes,bool bLE)

    {

    std::string s16;

    if(pUTF7 && nBytes)

    {

    unsigned char* p7 = (unsigned char*)pUTF7;

    bool bCode = false; //是否正在解码状态

    int n = 0; //解码的第几个字符,[0,7] 循环

    unsigned short code[8]; //解码的结果暂时存入该数组

     

    for(unsigned long i = 0;i < nBytes;++i)

    {

    if(bCode)

    {//正在解码状态

    if(p7[i] == '-')

    {//停止解码

    if(p7[i - 1] == '+')

    {

    UTF7to16(s16,'+',bLE);

    }

    bCode = false;

    }

    else

    {

    code[n] = IsBase64Char(p7[i]);

    if(code[n] != 0xFF)

    {

    switch(++n)

    {

    case 3://1个字符

    UTF7to16(s16

    ,(code[0] << 10) | (code[1] << 4) | (code[2] >> 2),bLE);

    break;

    case 6://2个字符

    UTF7to16(s16

    ,(code[2] << 14) | (code[3] << 8) | (code[4] << 2) | (code[5] >> 4)

    ,bLE);

    break;

    case 8://3个字符

    UTF7to16(s16

    ,(code[5] << 12) | (code[6] << 6) | code[7],bLE);

    n = 0;

    break;

    }

    }

    }

    }

    else

    {//不在解码状态

    if(p7[i] == '+')

    {//当前字符为 +

    n = 0;

    bCode = true; //标记处于解码状态

    }

    else

    {

    UTF7to16(s16,p7[i],bLE);

    }

    }

    }

    }

    return s16;

    }

    4 测试代码(VC++

    const wchar_t* pUTF16LE = L"A编码示例bC+123";

    //UTF16LE 转换为 UTF7,应返回A+fxZ4AXk6T4s-bC+-123

    std::string sUTF7 = UTF16toUTF7(pUTF16LE,wcslen(pUTF16LE) * 2);

    //UTF7 转换为 UTF16LE

    std::string sUTF16LE = UTF7toUTF16(sUTF7.c_str(),sUTF7.length());

    sUTF16LE += '\0'; //末尾添加一个 \0

    //pUTF16LE 所指向的宽字符串,应该是"A编码示例bC+123"

    pUTF16LE = (const wchar_t*)sUTF16LE.c_str();

     

    转载于:https://www.cnblogs.com/hanford/p/6106322.html

    展开全文
  • windows7设置utf8编码的方法如下:1、在cmd.reg文件中设置utf8编码Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]"CodePage"=dword:0000fde9"FontFamily"=dword:...

    e224d0c56af4722f581616bbec83d35d.png

    windows7设置utf8编码的方法如下:

    1、在cmd.reg文件中设置utf8编码Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]

    "CodePage"=dword:0000fde9

    "FontFamily"=dword:00000036

    "FontWeight"=dword:00000190

    "FaceName"="Consolas"

    "ScreenBufferSize"=dword:232900d2

    "WindowSize"=dword:002b00d2

    2、在cmd中使用chcp 65001命令设置编码格式为UTF-8。

    CMD 之后,命令行有时候无法显示中文,是乱码,于是我右键查看了编码,是GBK编码。如何修改为UTF-8

    如果要更改为 UTF-8,则需要运行 chcp 命令:chcp 65001

    展开全文
  • UTF-7 编码解码工具

    2014-03-14 10:36:47
    UTF-7,编码解码工具,可直接用于跨站脚本攻击xss
  • UTF8编码

    2017-10-11 13:55:00
    UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。 UTF-8的编码规则很简单,只有二条: 1)对于单字节的符号,字节的第一位设为0,后面7位为这...

    UTF-8是Unicode的实现方式之一。

    UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

    UTF-8的编码规则很简单,只有二条:

    1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

    2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

     

     

    下表总结了编码规则,字母x表示可用编码的位。

    Unicode符号范围          | UTF-8编码方式
    (十六进制)               | (二进制)
    --------------------+---------------------------------------------
    0000 0000-0000 007F | 0xxxxxxx
    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    转载于:https://www.cnblogs.com/nanqiang/p/7650192.html

    展开全文
  • utf8编码

    千次阅读 2012-05-10 23:09:16
    utf8编码 关于编码问题: 首先需要知道什么是编码为什么要编码, 计算机只能存储一个字节一个字节的二进制信息,所以需要把人可读的这些文字用唯一的方式在计算机内部表示出来, 但是表示的方法不唯一...

    utf8编码

    关于编码问题:

    首先需要知道什么是编码为什么要编码, 计算机只能存储一个字节一个字节的二进制信息,所以需要把人可读的这些文字用唯一的方式在计算机内部表示出来, 但是表示的方法不唯一;

    例如英文字符 就那么点 所以一个字节 也就是 8个二进制位就能给所有的进行编码,最多能给256个符号编码; 但是ASCII 编码实际只使用了 7位 所以最多编码 128个字符。

    但是汉字就不行了, 常用的汉字大概6000多个, 所以 至少需要两个字节, 所以中国government给出了两个字节的编码方案, 叫做GBxxxx (国标的意思)

    两个字节16位 最多 有65536 个字符, 所以 给这些汉字用是足够了,但是有个问题 如何让GB码和ASCII码互相兼容, 即这65536 个字符里面关于那些英文字符的编码 在GB码和ASCII码中要一致

    方法很简单 要求所有最高位为0的编码表示的是ASCII码, 最高位为1的编码是GB码;

    这样实际最多就只能表示32768个汉字了;

    但是GB国标码只能在中国用, 世界人民怎么办呢?世界有那么多的语言,每种语言都应该有编码 所以有了一个叫做unicode 统一编码的东西出现了;Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符(见百度百科http://baike.baidu.com/view/40801.htm)

    当然最后还有一个我们经常见到的UTF8编码, 这个是什么东西?

    UTF全称 是Unicode Transformation Format 即unicode 编码的变形形式;

    unicode编码是定长度的, 但是对于ASCII字符来讲 有点浪费了, 可以用一个字节表示 ASCII字符, 用多个字节表示 汉字什么的, 这就是变长度编码方式了, 那就需要对unicode编码进行一些变形;



    UTF-8的定义:

    0开头 latin字符
    10开头 一个字符连续字节中的某一个
    1111xxx 一个多字节字符的开始  前导1的个数表示字节个数 前导1后面紧跟一个0

    汉字一般3个字节

    unicode是统一编码
    utf8是对unicode的转换编码

    unicode    utf8
    0xxxxxxx -> 0xxxxxxx   latin 转化成自身
    00000yyy  yyxxxxxx  -> 110yyyyy  10xxxxxx  两字节 转化成 两字节
    zzzzyyyy  yyxxxxxx->1110zzzz 10yyyyyy 10xxxxxx  两字节转化成三字节(一般汉字就是如此)
    000wwwzz zzzzyyyy yyxxxxxx -> 11110www 10zzzzzz 10yyyyyy 10xxxxxx 三字节转化成4字节

    展开全文
  • UTF-7 编码转换

    2012-08-29 17:13:00
    #import"GTMBase64.h" //utf-7 需要用到GTMBase64 ...- (NSString *)stringFromUTF7String:(NSString *)utf7String { NSMutableString *result = [NSMutableString string]; NSInteger location = 0; ...
  • 在PHP中,可以先使用mb_detect_encoding()函数获取字符的原有编码;然后使用“mb_convert_...本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑php转换字符编码utf8function strToUtf8($str){$encode = mb_d...
  • tomcat7,已经设置utf-8编码,这个tomcat已经设置了utf-8的编码了,不需要再次设置
  • 个别utf8编码站点在iis7上客户端浏览器编码不能自动识别的编号,输入仍为gbk2312,而不是utf-8,这样导致我们看到的网站为乱码。 要解决这个问题,有两个方法,一为打开网站以后,右键,选择编码,然后选择utf-8,...
  • 然而,Eclipse工作空间(workspace)的缺省字符编码是操作系统缺省的编码,简体中文操作系统 (Windows XP、Windows 2000简体中文)的缺省编码是GB18030,Windows7/8/10的缺省编码是GBK,在此工作空间中建立的工程编码是...
  • if (*pInput > 0x00 && *pInput <= 0x7F) //处理单字节UTF8字符(英文字母、数字) { *pOutput = *pInput; pOutput++; *pOutput = 0; //小端法表示,在高地址填补0 } else if (((*pInput) & 0xE0) == 0...
  • 今天一个编码的问题纠结了我好久,京东商品详情页中的skuname是这样的:’\u934b\u56ec\ue56b\u701b\u612f\u2016\u741b\ue0a2\u30b3\u9427\u70ac\u60cc\u7441\u5474\u30b0\u741b\uff49\ue56b\u6d93\ue045\u0443\u76...
  • 文章目录文章背景UTF-7编码当中的加减号(+ -) 文章背景 来自于中科大2020年CTF比赛: 233 同学的字符串工具 本题要求了解UTF-7编码规范 UTF-7编码当中的加减号(+ -) 本题WP当中最令笔者奇怪的是答案当中的+ -,如图 ...
  • 工作中遇到遇到一个问题,就是win10电脑可以设置全局的utf-8编码,想按照这个思路把win7环境也配置成utf-8编码,对于一些有文字展示的,不会乱码。 win10环境设置utf-8编码的方法很简单,可以参考这篇文章:...
  • utf8编码检测方法分享

    2021-01-20 06:26:40
    代码如下:public bool isUtf8(byte[] rawText) { bool result = true;  if (rawText == null) { return !result; }  int pos = 0;... rawText.Length && result) { if ((rawText[pos] & 0x7F) =
  • UTF-8 编码

    2021-01-10 22:45:37
    对于单字节的 UTF-8 编码,该字节的最高位为 0,其余 7 位用来对字符进行编码(等同于 ASCII 码)。 对于多字节的UTF-8编码,如果编码包含 n 个字节,那么第一个字节的前 n 位为1,第一个字节的第 n+1 位为0,该字节...
  • UTF8编码规则

    千次阅读 2008-10-31 17:25:00
    utf-8为变长编码, 编码规则如下:BinaryHexadecimalDecimalWidth00000000-0111111100-7F0-1271 byte11000010-11011111C2-DF194-2232 bytes11100000-11101111E0-EF224-2393 bytes
  • UTF8其实和Unicode是同类,就是在编码方式上不同! 首先UTF8编码后的大小是不一定,不像Unicode编码后的大小是一样的! 我们先来看Unicode的编码:一个英文字母 “a” 和 一个汉字 “好”,编码后都是占用的空间...
  • 乱码,查找原因 因为页面时utf 编码 zend 设置的 gbk 编码, 修改 zend 设置 edit - set encoding 修改 other utf-8单个PHP文件中文乱码问题解决方法 首先使用zend studio7打开一个UTF8编码的PHP文件,点击File...
  • UTF-8的编码规则很简单,只有二条: 1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。 2)对于n字节的符号(n>1),第一个字节的前n位都...
  • 转载于:https://www.cnblogs.com/xudj/p/10163573.html
  •  1、设置string默认编码utf8,只需要在文件头部加入以下代码 1 #pragma execution_character_set("utf-8") //默认使用UTF8 2、debug提示窗口显示utf8,打开C:\Program Files (x86)\Microsoft Visual...
  • UTF8编码

    千次阅读 2004-10-23 19:19:00
    UTF-8Section: Linux Programmers Manual (7)Updated: 1995-11-26Index Return to Main Contents--------------------------------------------------------------------------------名字UTF-8 - ASCII 兼容的多...
  • 在数据使用中会存在一个特殊的问题,就是US7ASCII字符集.我们知道US7ASCII是早期的英文字符集,是不支持中文的。但是,有的用户使用是Oracle6,Oracle7.0,Oracle7.1,这几版本不支持中文字符集,存储中文也会使用US...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,416
精华内容 1,766
关键字:

utf7编码