ios 扫码怎么讲utf-8和gbk

ios 扫码怎么讲utf-8和gbk,第1张

首先理解java的字符概念 java中字符串是字符的序列,虚拟机内部的字符都是16位的unicode字符,等价于C++中的WCHAR,也是为了实现虚拟机方便 WCHAR叫做宽字符,对应的MuitiChar叫做多字符,这种多字符中字符的位数不唯一 GBK 和 UTF8 是多字符的不同编码形式 s=new String(sgetBytes("gbk"),"utf-8"); 的意思是: byte[] bytes=sgetBytes("gbk"); s=new String(bytes,"utf-8"); 第一句是将s对应的gbk编码转出来,形成一个字节流 第二句是将这个字节流按照utf-8编码转为java字符串,因此相当于将gbk编码的字节流当做utf-8来使用,这样在中文中会出现乱码 你的问题是,接口返回的已经是utf-8 所以它必须是byte[] 流,如果是字符串的话就不好办了

b

最近项目中有个需求,在iOS设备上使用iOS系统提供的内容分享功能,从第三方App应用直接分享实体内容到我们的应用中。其大概的原理是这样的,首先为我们的iOS应用注册可以打开document types(文档类型),然后在第三方应用中,如果它们使用了iOS提供的分享功能,那么就会看到我们的应用程序,点击进行分享。

而关于需求的设计和实现的具体思路,我会在下一篇博客中详细讲解。这篇文章是来讲一下在iOS系统中为了更好的进行类型标识,而提供的一套共用的规范,也就是标题中提到的“Uniform Type Identifier(UTI)”,我把它翻译成“统一类型标识符”,下面统一简称为“UTI”。

网上关于UTI的使用教程少之又少,所以我只是参考了苹果官方文档提供的讲解,这篇博客权当是我对于官方文档的一个理解吧!!自认为很重要的部分,我会贴出来官方文档原文,以便于大家学习理解,不至于被我的歪词所误导,同时也推荐大家从开发者中心上搜一些文档来看,这里推荐几篇:

1 Cocoa Core Competencies -- Uniform Type Identifier‍

这篇文档提供了一个视图来说明UTI是什么,怎么工作和被谁使用,是个非常好的新手指南。

2 Uniform Type Identifier介绍和使用‍

这篇文档详细得描述了UTI的基础概念和属性,还有它们的使用方法,内容非常丰富,本文主要参考的就是这篇

3 System-Declared Uniform Type Identifiers‍

这篇文档提供了在OS X系统中定义的一个UTI的列表,我们可以查看每一种官方提供的UTI的定义和涵义。

4 UTType Reference‍

这篇文档提供了对UTI字符串直接 *** 作的函数方法

5 一步一步为iOS应用添加自定义的document type和新的UTI‍

顾名思义,这篇文档,讲解的是如何在iOS应用中导入新的UTI和添加自定义的document type。

为什么会有UTI,打个比方,它就像是如今世界各国作为官方语言统讲得英文。为什么这么比喻呢,因为中国人讲母语汉语,法国人讲母语法语,但是如果一个中国人到了法国,而又不懂法语,碰到的法国人不懂汉语,那么他们如何交流沟通呢,这就是英文的用武之地了。而相对而言,苹果 *** 作系统相当于整个世界,各个不同的程序或者服务相当于各个国家,俩个不同的程序想要互通交流,就比如互相发送文件,可是一个使用文件扩展名,一个使用MIME类型,俩者的数据类型不同,无法解析,都互相不认识,那么怎么交流沟通呢在这样的情景下,UTI就有了用武之地啦,它就充当的是现实世界的英文这个角色。

Uniform type identifiers(UTIs)提供了在整个系统里面标识数据的一个统一的方式,比如documents(文档)、pasteboard data(剪贴板数据)和bundles(包)。

大多数情况下,一个UTI提供的是系统中所有程序和服务都能够识别并且依赖的一个唯一的标识,这么讲可能有些太抽象,我们使用一下官方文档中给出的例子,比如一个JPEG类型的文件,在不同的环境下,可以有下面几种不同的标识方法:

而UTI则是用‘publicjpeg’这个字符串标识,完全代替了这些不一致的标签,这个字符串和其他任何一个旧标签都是完全兼容的,而且他们之间可以相互转换。由于UTI可以标识任何类型的实体,所以他们相对于旧标签来说灵活性更强了;使用UTI我们可以表示下面这些实体:

Apple给我们提供了在iOS和Mac应用中通用的UTI字符串集合,比如,'publicdata'、'publicitem'、'publicimage'等,这些我们都可以在官方文档中进行查阅他们的涵义。除此之外,我们也可以在应用程序中自定义自己的UTI字符串,比如我们可以定义一个标识特殊文档格式的UTI字符串叫'ccicocshaobozheng',如果其他的应用程序想要支持我们这种格式的文档,他们就可以用'ccicocshaobozheng'来标识我们的文档。

看到我们上边的举例了,那么我们来说一下定义UTI字符串时所用到的字符集。通常一个UTI字符串是一个包含ASCII字符的Unicode字符串,同时也可以加入罗马字母和阿拉伯数字,如(A-Z),(a-z),(0-9)还有点号("")和连接符("-")。而任何包含非法字符的字符串,如包含下划线'_',都无法作为UTI来标识内容,而且Apple不会有任何错误反馈。

就像我上面的例子一样,UTI的定义和我们开发iOS程序时填写organization时一样,采取的是反域名规则。如下面这几种:

而UTI中的域名,如‘com’、‘public’这些,仅仅是用来表示这个UTI字符串在域名层级中的位置,它不会影响任何相似类型的分组。比如,‘public’域名就是大部分应用程序用来标识标准类型的,而目前仅仅只有Apple可以创建‘public’域名的UTI。

另外,我们可能会碰到的是一种‘dyn’域名,是动态域名,意思就是我们使用中,不会指定这种类型的UTI为某一个字符串,然后系统运行过程中,会自动识别帮我们处理。针对这种动态标识,我们是看不到的,但是我们可以通过UTI字符串的 *** 作方式转换成我们的常用类型,比如OSType,MIME类型等。

最后一种就是可以自定义的域名,代表性的就是‘com’域名,Apple也给我们提供了一些他们定义的'com'域名的UTI。

UTI相对于其他那些旧标签的一个关键优势就是在于,它可以在一个顺应结构中声明。而用我们面向对象的方式说,UTI就是可继承的,而且是多继承方式。先上图:

如上图所示,‘publichtml’这个UTI就是继承于‘publictext’这个UTI,因为‘publichtml’标识的是HTML文本格式,也属于是文本格式的一种,而文本、等等这些内容又都属于是数据的一种,所以他们继承于'publicdata'这个UTI。

上面这个UTI继承结构图,指的是UTI中的内容形式的继承结构,此外,原则上来说,指定UTI层次的时候,即可以指定它的功能结构,也可以指定它的物理结构,上图是就是一个内容形式的功能结构图物理结构指的就是这个UTI的物理实质,比如它标识一个目录,一个文件等,而功能结构指的就是这个UTI的用图,比如同样是文件,它标识的可以是、视频等等。 而官方文档也给出了一般指定UTI层次结构的规则:

然而,指定UTI的功能层次并不是强制的,但是这样做是考虑到可以更好地将UTI集成到系统一些特性中,就比如Spotlight应用,就可以把我们指定的功能性UTI和命名属性联系起来。下面是一个UTI功能顺应结构和物理顺应结构图:

这个顺应性使得我们的UTI在决定类型上拥有更高的灵活性,不仅避免了大量的条件判断的使用,而且还可以关联你想不到的一些类型。

在Mac OS中我们开发应用时我们可以经常使用到UTI,但是在开发iOS应用程序时,我们应用到UTI的场景不是很多,这也是现在网上教程偏少得原因。而在iOS开发中,一般我们使用UTI来标识剪贴板的类型。而在具体使用到Apple给我们提供的UTI字符串的时候,我们必须使用在UTCoreTypesh文件中定义的常量来代替直接使用字符串。关于UIPasteboard的详细使用,大家可以去这篇博客中详细学习一下: 精通UIPasteboard粘贴板 。

现在我们来看一下苹果提供的一些直接 *** 作UTI的函数方法,简单列举几个。我们可以在MobileCoreServices这个framework中的UITypeh文件中找到,我们也可以仔细的看一下这个framework中的其他文件,都是对UTI的一些定义和声明。

苹果允许Mac开发者为他们的Mac App中独有的数据格式自定义新的UTI。它们一般被声明在下面几个文件中

使用官方给我们的一个UTI声明的例子,Publicjpeg声明:

一个UTI声明的属性列表:

<section>

<div style="margin-top:1667em;margin-bottom:1667em;">

<table border="0" cellspacing="0" cellpadding="5">

<tbody>

<tr>

<th scope="col" style="font-weight:400;background-color:#93A5BB;padding:03em 0667em;font-size:13px;color:#FFFFFF;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#9BB3CD;border-right-width:1px;border-right-style:solid;border-right-color:#9BB3CD;">

<p style="font-weight:700;line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;margin-bottom:033em;">

Key

</p>

</th>

<th scope="col" style="font-weight:400;background-color:#93A5BB;padding:03em 0667em;font-size:13px;color:#FFFFFF;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#9BB3CD;border-right-width:1px;border-right-style:solid;border-right-color:#9BB3CD;">

<p style="font-weight:700;line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;margin-bottom:033em;">

Value type

</p>

</th>

<th scope="col" style="font-weight:400;background-color:#93A5BB;padding:03em 0667em;font-size:13px;color:#FFFFFF;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:#9BB3CD;border-right-width:1px;border-right-style:solid;border-right-color:#9BB3CD;">

<p style="font-weight:700;line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;margin-bottom:033em;">

Description

</p>

</th>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTExportedTypeDeclarations</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

array of dictionaries

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

An array of exported UTI declarations (that is, identifiers owned by the bundle’s publisher)

</p>

</td>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTImportedTypeDeclarations</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

array of dictionaries

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

An array of imported UTI declarations (that is, identifiers owned by another company or organization)

</p>

</td>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTTypeIdentifier</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

string

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

The UTI for the declared type This key is required for UTI declarations

</p>

</td>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTTypeTagSpecification</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

dictionary

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

A dictionary defining one or more equivalent type identifiers

</p>

</td>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTTypeConformsTo</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

array of strings

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

The UTIs to which this identifier conforms

</p>

</td>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTTypeIconFile</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

string

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

The name of the bundle icon resource to associate with this UTI

</p>

</td>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTTypeDescription</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

string

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

A user-visible description of this type You can localize this string by including it in an <code style="font-family:Courier, Consolas, monospace;color:#666666;">InfoPliststrings</code> file

</p>

</td>

</tr>

<tr>

<td scope="row">

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

<code style="font-family:Courier, Consolas, monospace;color:#666666;">UTTypeReferenceURL</code>

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

string

</p>

</td>

<td>

<p style="line-height:normal;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;">

The URL of a reference document describing this type

</p>

</td>

</tr>

</tbody>

</table><br />

</div>

</section>

<section>

<a name="//apple_ref/doc/uid/TP40001319-CH204-SW4" title="Recommendations for Declaring new Uniform Type Identifiers" style="color:#3366CC;font-family:'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;font-size:13px;background-color:#FFFFFF;"></a>

</section>

<p>

<br />

</p>

而且自定义的UTI必须指定UTExportedTypeDeclarations或者UTImportedTypeDeclarations,这样如果是你定义的UTI,第三方应用程序和服务都可以使用,而如果是其他人定义的UTI,那么加入到你的项目中后,你就可以看到这种类型的数据。

原文地址: 郑少博的技术博客---详解苹果提供的UTI(统一类型标识符)

WWDC 2016 开幕之前,统一码技术委员会(Unicode Consortium)就提前公布了 Unicode 9 所包含的 72 个新 Emoji 表情。而今据了解,Unicode 9 的“最终版本”已经于当地时间 6 月 21 日正式发布,实际上与最初公布的版本基本一致,同样也是 72 个新表情,包括一系列食物、面部表情、动物以及体育活动等。那么问题来了,为什么部分果粉升级了iOS 10却没有Unicode 9的新表情?下面跟小编一起来看看吧!如果你安装了 iOS 10,可能已经注意到目前 Beta 1 版本并没有包含这 72 个新表情。一般来说,新版本的 Unicode 表情从发布到出现在手机厂商的设备上需要一段时间的整合。有开发者表示,也许我们要等到秋季才能在安装 iOS 10 的设备上使用这些新表情。除了 iOS 之外,Unicode 9 的新表情也会出现在 Android 智能手机平台上。从以往的经历来看,72 个新表情很有可能不会出现在 iOS 100 正式版当中,用户要等到 101 甚至是 102 正式版的发布。比如说明年 3 月份新款 iPad 发布时,苹果就有可能会将 Unicode 9 的新表情正式整合至新系统。当然,在未来的 iOS 10 Beta 版本中,新表情也有可能会提前出现。

Base64编码是一种数据编码方式,目的是让数据符合传输协议的要求。能够将任何二进制数据,转换成只有64 +1(“=”等号)个字符组成的文本文件。

提示:Base64不是加密算法,只是一种编码算法,对数据内容进行编码不以明文来传输。

标准Base64编码使用的64个字符:

早期的传输协议,如邮件传输SMTP协议,只能传输ASCII编码中 可打印字符 ,导致原本8bit字节码(0-255)超出了可用范围。所以Base64将原本ASCII码的控制字符甚至是ASCII编码之外的字符都转换成可打印的6bit字符。

提示:ASCII编码的范围是0-127,其中0-31和127位共33个字符属于 控制字符 ,剩下的32-126属于 可打印字符

编码过程:

1、按字符串长度,以每3个8bit的字符为一组

2、对每组获取每个字符的ASCII编码(去ASCII编码表找每个字符的码位)

3、将ASCII编码转换成8bit的二进制,得到一组38=24bit的字节

4、再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节

5、将这4个8bit的字节转换成10进制,对照Base64编码表 (下表),得到对应编码后的字符。

注意:

示例:对 Hello! 进行Base64编码,按照ASCII表,其转换过程如下图所示:

Hello! 的Base64编码结果为 SGVsbG8h 。

原始字符串长度为6个字符,编码后长度为8个字符,每3个原始字符经Base64编码成4个字符,编码前后长度比4/3。

这个长度比很重要 。比原始字符串长度短,则需要使用更大的编码字符集,长度比越大,则需要传输越多的字符,传输时间越长。

注意:Base64编码是每3个原始字符编码成4个字符,如果原始字符串长度不能被3整除,那怎么办?使用0值来补充原始字符串。

示例:对 Hello!! 进行Base64编码:

注:图中蓝色背景的二进制0值是额外补充的。

Hello!! 的Base64编码的结果为 SGVsbG8hIQAA 。

最后2个零值只是为了Base64编码而补充的,在原始字符中并没有对应的字符,那么Base64编码结果中的最后两个字符 AA 实际不带有效信息,所以需要特殊处理,以免解码错误。

标准Base64编码通常用 = 字符来替换最后的 A,即编码结果为 SGVsbG8hIQ==。

因为 = 字符并不在Base64编码索引表中,其意义在于结束符号,在Base64解码时遇到 = 时即可知道一个Base64编码字符串结束。

如果Base64编码字符串不会相互拼接再传输,那么最后的 = 可以省略,解码时如果发现Base64编码字符串长度不能被4整除,则先补充 = 字符,再解码即可。

解码是对编码的逆向 *** 作,但注意一点:对于最后的两个 = 字符,转换成两个 A 字符,再转成对应的两个6比特二进制0值,接着转成原始字符之前,需要将最后的两个6比特二进制0值丢弃,因为它们实际上不携带有效信息。

UTF-8是Unicode字符集的编码规则,用于网络传输。

Base64是用来支持某些只支持传输ASCII编码可打印字符的协议,将ASCII编码中的控制字符与ASCII之外的字符转换为ASCII可打印字符来用于传输。

漫画:什么是 Base64 算法?

iOS开发探索-Base64编码

关于base64编码的原理及实现

ASCII码对照表

以上就是关于ios 扫码怎么讲utf-8和gbk全部的内容,包括:ios 扫码怎么讲utf-8和gbk、详解苹果提供的UTI(统一类型标识符)、ios按unicode转换为data 为什么起那么有fffe等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9421706.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存