• ios开发--编码格式


    1.url编码

    ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是:

    NSString * encodingString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    结果是%3A%2F%2F;

    2.url解码中文

    请求后,返回的数据,如果显示的是这样的格式:%3A%2F%2F,此时需要我们进行UTF-8解码,用到的方法是:

    NSString *str = [model.album_name stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    UTF-8转GBK

    结果是中文

    3.Unicode 编码和汉字转化

    这段代码一般用于网络编程。从服务器获得的数据一般是Unicode格式字符串,要正确显示需要转换成中文编码。

    // NSString值为Unicode格式的字符串编码(如u7E8C)转换成中文

    //unicode编码以u开头

    + (NSString *)replaceUnicode:(NSString *)unicodeStr

    {

        

        NSString *tempStr1 = [unicodeStrstringByReplacingOccurrencesOfString:@"\u"withString:@"\U"];

        NSString *tempStr2 = [tempStr1stringByReplacingOccurrencesOfString:@"""withString:@"\""];

        NSString *tempStr3 = [[@"""stringByAppendingString:tempStr2] stringByAppendingString:@"""];

        NSData *tempData = [tempStr3dataUsingEncoding:NSUTF8StringEncoding];

        NSString* returnStr = [NSPropertyListSerializationpropertyListFromData:tempData

                                                              mutabilityOption:NSPropertyListImmutable

                                                                        format:NULL

                                                              errorDescription:NULL];

        NSLog(@"%@",returnStr);

        return [returnStrstringByReplacingOccurrencesOfString:@"\r\n"withString:@" "];

    }

    U6211U662fU4e2dU6587U5b57U7b26
    uxxxx这种格式是Unicode写法,表示一个字符,其中xxxx表示一个16进制数字,范围所0~65535. Unicode十六进制数只能包含数字0~9、大写字母A~F或者小写字母A~F。需要注意到是:Unicode的大小端问题,一般都是小端在前,例如 u5c0f 表示汉语中的 '小'字,转换成10进制就是9215,所以在byte数组中应该是1592.

    汉字转Unicode

    private string Unicode2Chinese(string strUnicode)
    {
        string[] splitString = new string[1];
        splitString[0] = "\u";
        string[] unicodeArray = strUnicode.Split(splitString, StringSplitOptions.RemoveEmptyEntries);
        StringBuilder sb = new StringBuilder();
    
        foreach (string item in unicodeArray)
        {
            byte[] codes = new byte[2];
            int code1, code2;
            code1 = Convert.ToInt32(item.Substring(0, 2), 16);
            code2 = Convert.ToInt32(item.Substring(2), 16);
            codes[0] = (byte)code2;//必须是小端在前
            codes[1] = (byte)code1;
            sb.Append(Encoding.Unicode.GetString(codes));
        }
    
        return sb.ToString();
    }

    Unicode转汉字

    private string Chinese2Unicode(string strChinese)
    {
        string strUnicodes = string.Empty;
        foreach (char item in strChinese.ToCharArray())
        {
            strUnicodes += "\u" + ((int)item).ToString("x"); //16进制
        }
        return strUnicodes;
    }
  • 相关阅读:
    指针和引用的区别
    vs不自动退出控制台程序的办法
    ads出现村田电容电感无法仿真的问题解决(`BJT1' is an instance of an undefined model `BJTM1')
    解决浏览器跨域的几中方式
    js的事件委托机制
    let和const命令
    JavaScript中闭包的写法和作用详解
    提升HTML5的性能体验系列之五 webview启动速度优化及事件顺序解析
    提升HTML5的性能体验系列之四 使用原生UI
    提升HTML5的性能体验系列之三 流畅下拉刷新和上拉
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/5233891.html
Copyright © 2020-2023  润新知