UTF-16的编码转换函数(Python实现)
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie
讨论新闻组及文件
此函数用于将Unicode的编码用UTF-16编码方式表示出来,由于Unicode超过0xFFFF的编码需要用两个16bit联合来表示,所以看起来就没有0xFFFF以下那么一一对应看起来直观。为了使用方便,实现此函数。
其函数实现算法来自《UTF-16/UCS-2》
具体算法描述如下:
Example UTF-16 encoding procedure
The character at code point U+64321 (hexadecimal) is to be encoded in UTF-16. Since it is above U+FFFF, it must be encoded with a surrogate pair, as follows:
v = 0x64321
v′ = v - 0x10000
= 0x54321
= 0101 0100 0011 0010 0001
vh = 0101010000 // higher 10 bits of v′
vl = 1100100001 // lower 10 bits of v′
w1 = 0xD800 // the resulting 1st word is initialized with the high bits
w2 = 0xDC00 // the resulting 2nd word is initialized with the low bits
w1 = w1 | vh
= 1101 1000 0000 0000 |
01 0101 0000
= 1101 1001 0101 0000
= 0xD950
w2 = w2 | vl
= 1101 1100 0000 0000 |
11 0010 0001
= 1101 1111 0010 0001
= 0xDF21
The correct UTF-16 encoding for this character is thus the following word sequence:
0xD950 0xDF21
Python实现如下:
def EncodeUTF16(u):
vc = u - 0x10000
vh = (vc & 0xFFC00) >>10
vl = vc & 0x3FF
w1 = 0xD800
w2 = 0xDC00
w1 = w1 | vh
w2 = w2 | vl
return w1,w2
强大的Eclipse是我见过的第二个可以直接复制过来就有语法高亮和保持格式的编辑器/IDE,以前我见过的唯一一个就是MS它自己的VS。
用此算法计算《U1D300--Tai Xuan Jing(太玄经)Unicode编码.pdf》中前三个字符的数值,获得结果:
0x1D300
0xd834 0xdf00
0x1D301
0xd834 0xdf01
0x1D302
0xd834 0xdf02
然后因为X86的机器是小头机,用UltraEdit的16进制编辑模式,输入
00000002h: 34 D8 00 DF 34 D8 01 DF 34 D8 02 DF
用UTF-16模式保存后,前面加上了BOM,FF FE用于表示小头机,再换回文本模式你就能看到 “
分享到:
相关推荐
1. **手动转换**:在编程环境中,如Python、Java等,可以通过内置的函数库进行编码转换。例如在Python中,可以使用`codecs`模块的`encode`和`decode`函数来实现转换。例如: ```python utf8_text = '你好,世界!'...
ANSI和UTF-8是两种不同的编码格式,"格式转换"是指从一种编码转换到另一种,"批量处理"意味着我们需要对多个文件进行同样的操作,而不是逐个手动操作。 在实际操作中,可以使用各种编程语言如Python、批处理脚本...
我们将以一个具体的例子来说明,即如何将TXT文件从UTF-16LE编码转换为UTF-8编码。 首先,我们要导入必要的库。`os`库用于操作文件和目录,而`chardet`库则用于检测文件的编码类型。以下是一个简单的Python脚本,...
这可以通过编程语言中的函数或工具来实现,例如Python的`codecs`库中的`encode`和`decode`方法,或者使用命令行工具如`iconv`。 在实际操作中,转换过程需要特别注意编码的正确识别和处理,以避免乱码问题。当从一...
这个过程可以通过编程语言提供的函数实现,例如在Python中可以使用`decode('utf-8')`方法。 2. **查找映射表**: 有了Unicode码点后,我们需要一个映射表,将码点与相应的图像资源对应起来。这个映射表可能是一个...
在某些编程语言中,如Python,可以使用内置的函数实现转换,如`str.encode('utf-8')`将UNICODE字符串转换为UTF-8,`str.decode('utf-8')`将UTF-8字符串解码回UNICODE。 **五、实际应用** 在处理文本数据时,了解...
UTF-8(8位Unicode转换格式)是一种广泛使用的多字节字符编码方案,它兼容ASCII编码并能表示Unicode字符集中的所有字符。UTF-8最大的优点在于其前128个字符与ASCII编码完全一致,因此在英语为主的系统和网络中非常...
例如,在Python中,我们可以使用`codecs`库进行编码转换: ```python import codecs # 从GBK转换为UTF-8 with codecs.open('GBK_file.txt', 'r', 'gbk') as gbk_file: content = gbk_file.read() with codecs....
在实际操作中,开发者通常会编写转换函数或者使用现成的库来处理这种编码转换。例如,对于C/C++开发者,可以使用`iconv`库,Python用户则可以使用`chardet`和`codecs`模块。转换过程需要仔细处理异常情况,确保正确...
在实际操作中,可以使用各种工具实现这个过程,例如Notepad++、Sublime Text等文本编辑器都提供了编码转换功能。对于大批量文件的转换,可以编写脚本自动化处理,如VBScript(如压缩包中的编码转换.vbs可能就是用于...
在提供的压缩包文件“编码转换”中,可能包含了实现这种转换的工具或脚本。使用这些资源,用户可以方便地在UTF-8和GBK之间进行文件编码的转换,解决编码不一致带来的问题,确保文本数据的正确性和可读性。对于经常...
这通常涉及到编码转换函数的使用。在编程语言如Python、Java或C++中,都有内置的函数库支持这种转换。例如,在Python中,可以使用`codecs`模块的`encode`和`decode`函数来实现: ```python # UTF-8转GB2312 utf8_...
在本主题中,我们将深入探讨如何使用Python来实现Base64的编码和解码功能,并了解相关的源码实现。 首先,让我们来看看Python内建的`base64`模块。这个模块提供了多个函数,包括`b64encode()`和`b64decode()`,分别...
编码转换的方法有很多,包括使用编程语言的内置函数(如Python的`codecs`库)、专门的文本编辑器或在线转换工具。例如,在Python中,可以使用`encode`和`decode`方法来实现编码间的转换,如`str.encode('utf-8')....
在本文中,我们将深入探讨GBK和UTF-8的区别,以及如何使用Python进行编码转换,特别关注如何将GBK编码的文件转换为UTF-8编码。 首先,GBK是GB2312编码的升级版,它是针对简体中文的一种字库编码,主要在中国大陆...
本篇文章将详细探讨GBK到UTF-8的转换函数以及相关知识点。 GBK(Great Chinese Character Set)编码是中国大陆广泛使用的汉字编码标准,它是GB2312的扩展,兼容了大部分GB2312编码,同时也包含了更多的汉字和符号。...
整个Python脚本提供了两种主要函数:`convert`函数用于处理单个文件的编码转换,`explore`函数用于遍历目录并调用`convert`函数处理文件。同时还有一个`main`函数用于指定起始目录,并递归地处理所有子目录中的...
UTF-16的优势在于它能用固定大小的块来表示大部分常见字符,对于许多编程语言(如Java、Python等)来说,这使得内存管理更为简单。 ASCII编码是最早、最简单的字符编码,它只包含128个字符,全部为7位二进制表示,...
标题"Python-convert2utf将目录下的全部源文件转成UTF8编码"指的是使用Python编写的一个脚本或工具,该工具能够遍历指定目录,检测并转换其中的GB、GBK以及其他非UTF-8编码的文本文件和源代码文件,统一转换为UTF-8...
在泉中流版的实现中,它特别强调了对汉字和其他UTF-8编码的字符的支持。 Python语言提供了内置的`base64`库,用于进行Base64编码和解码操作。`lzqDecodeBase64.py`和`lzqEncodeBase64.py`两个文件很可能是实现了...