当前位置:网站首页>程序员常说的“左手锟斤拷,右手烫烫烫”是怎么回事?
程序员常说的“左手锟斤拷,右手烫烫烫”是怎么回事?
2022-08-02 22:49:00 【InfoQ】
实际上锟斤拷/烫烫烫/屯屯屯/锘锘锘都是字符集转换之间的问题,一些特定用途的字节在另一种字符集编码表现为这些特殊字符。
接下来,让我们一一看看它们的来历。
锟斤拷
起源于GBK字符集于Unicode字符集之间的转换。众所周知,Unicode是现在最为通用的编码方式之一,它与其它一些老编码体系进行转换时,一定存在一些Unicode无法表示的字(因为Unicode设计的时候并未完全兼容所有的编码体系,而且也没有必要),所以Unicode官方使用了一个占位符来表示这些无法表示的文字,即:U+FFFD (REPLACEMENT CHARATER),这样我们考察U+FFFD的UTF-8编码表示,是"0xef0xbf0xbd",如果重复多次,如"0xef0xbf0xbd0xef0xbf0xbd",然后在GBK/CP936/GB2312/GB18030字符集中解码的话,一个汉字两个字节,最终结果就是锟斤拷——锟(0xEFBF),斤(0xBDEF),拷(0xBFBD)。
#!/usr/bin/env python
# -*- coding=utf8 -*-
"""
# File Name : kunjinkao.py
# Author : SangYu
# Email : [email protected]
# Created Time : 2022年08月02日 星期二 21时53分16秒
# Description :
"""
if __name__ == "__main__":
for i in u'\uFFFD'.encode('utf-8'):
print("%x" % ord(i)),
print ""
print((u'\uFFFD'.encode('utf-8')*2).decode('gbk'))
for i in u'锟斤拷'.encode('gbk'):
print("%x" % ord(i)),
pass
执行结果:

烫烫烫与屯屯屯
Windows平台中,MicroSoft的VC编译器为了debug内存问题,在用户开启Debug模式时,会将未初始化的栈内存全部使用0xcc进行填充,对于未初始化的堆内存全部使用0xcd进行填充,同样的道理,我们查看这个值得GBK码表示如下:
[hex(ord(i)) for i in u'烫烫烫'.encode('gbk')]
[hex(ord(i)) for i in u'屯屯屯'.encode('gbk')]
测试结果:

锘锘锘
UTF编码方案中有标识编码的标准标记,如UTF-16中是FF FE,当我们在编写网页时使用记事本进行编辑,此时使用的是GBK编码,那么转换过来就会增加一个Unicode保留字符U+FEFF,同样地,如果这个字符头被表示为UTF-8编码后,就是"0xEF0xBB0xBF",当转换为GBK编码后,就会是如下的字符:
- 锘EFBB
- 匡BFEF
- 豢BBBF
[hex(ord(i)) for i in u'锘匡豢'.encode('gbk')]
测试结果:

边栏推荐
猜你喜欢
随机推荐
APT level comprehensive free kill with Shell
d实验新异常
gdb调试简要总结
PHP实现登录失败三次需要输入验证码需求
学习Autodock分子对接
# DWD层及DIM层构建## ,220801 ,
秒懂网络拓扑中的下一跳地址
总数据量超万亿行,玉溪卷烟厂通过正确选择时序数据库轻松应对
No code development platform data ID introductory tutorial
如何使用vlookup+excel数组公式 完成逆向查找?
无代码开发平台表单样式设置步骤入门课程
严格反馈非线性系统基于事件触发的自抗扰预设有限时间跟踪控制
基于飞腾平台的嵌入式解决方案案例集 1.0 正式发布!
IDO预售代币合约系统开发技术说明及源码分析
vscode 自定义快捷键——设置eslint
Token、Redis实现单点登录
Cholesterol-PEG-Amine,CLS-PEG-NH2,胆固醇-聚乙二醇-氨基脂两亲性脂质衍生物
你离「TDengine 开发者大会」只差一条 SQL 语句!
RuoYi-App Startup Tutorial
用大白话解释“什么是ERP?” 看完这篇就全明白了