锟斤拷?UTF-8与GBK互转,为什么会乱码?

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题! 你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。 阅读详情

[置顶] 锟斤拷?UTF-8与GBK互转,为什么会乱码?

标签: UTF-8GBK编码乱码中文
  7927人阅读  评论(0)  收藏  举报
  分类:

作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福。

但其实只要明白编码之间的转换规律,其实乱码so easy~


我们知道,计算机存储数据都是2进制,就是0和1,那么这么多的字符就都需要有自己对应的0和1组成的序列,计算机将需要存储的字符转换成它们对应的01序列,然后就可以储存在电脑里了。


比如我们可以定义用8位2进制表示一个字符,“00000000”表示小写字母“a”,“00000001”表示小写字母“b”,那么计算机要存储“ab”的时候,其实在计算机里的存储的是“0000000000000001”,读取的时候先读取前8位,根据对应关系,可以解码出“a”,再读取后8位,又可以解码出“b”,这样就读出了当时写入的“ab”了。而我们定义的这种字符和二进制序列的对应关系,就可以称之为编码。我们如果需要将“ab”发送给别人,因为网络也是基于二进制,所以只要先约定好编码规则,就可以发送“0000000000000001”,然后对方根据约定的编码解码,就可以得到“ab”。现在是互联网的时代,我们经常需要和其他的计算机进行交互,一套编码系统还是比较复杂的,所以大家就需要约定统一的编码,这样的编码是大家都约定好的,就不用再去约定编码规则了~然而,为了满足各种不同的需求,人们还是制定了很多种编码,没有哪一种能全面替代其他编码,所以现在多种编码并存。通常这些编码都被大家所接受和熟知,所以现在不用再通信前商量编码的对应规则和细节,只需要告诉对方,我采用的是什么通用编码,彼此就能愉快地通信了。


所以乱码的本质就是:读取二进制的时候采用的编码和最初将字符转换成二进制时的编码不一致。


ps:编码有动词含义也有名词含义,名词含义就是一套字符和二进制序列之间的转换规则,动词含义是使用这种规则将字符转换成二进制序列。


好了,废话不多,直接上一段代码:

[java]  view plain  copy
  1. import java.io.UnsupportedEncodingException;  
  2.   
  3. public class EncodingTest {  
  4.     public static void main(String[] args) throws UnsupportedEncodingException {  
  5.         String srcString = "我们是中国人";  
  6.         String utf2GbkString = new String(srcString.getBytes("UTF-8"),"GBK");  
  7.         System.out.println("UTF-8转换成GBK:"+utf2GbkString);  
  8.         String utf2Gbk2UtfString = new String(utf2GbkString.getBytes("GBK"),"UTF-8");  
  9.         System.out.println("UTF-8转换成GBK再转成UTF-8:"+utf2Gbk2UtfString);  
  10.     }  
  11. }  

因为UTF-8和GBK是两套中文支持较好的编码,所以经常会进行它们之间的转换,这里就以它们举例。

以上代码运行打印出以下内容:


UTF-8转换成GBK:鎴戜滑鏄腑鍥戒汉
UTF-8转换成GBK再转成UTF-8:我们是中国人


我们看到,将"我们是中国人"以UTF-8编码转换成byte数组(byte数组其实就相当于二进制序列了,此过程即编码),再以GBK编码和byte数组创建新的字符串(此过程即以GBK编码去解码byte数组,得到字符串),就产生乱码了。

因为编码采用的UTF-8和解码采用的GBK不是同一种编码,所以最后结果乱码了。

之后再对乱码使用GBK编码,还原到解码前的byte数组,再使用和最初编码时使用的一致的编码UTF-8进行解码,就可得到最初的“我们是中国人”。

这种多余的转换有时候还是很有用的,比如ftp协议只支持ISO-8859-1编码,这个时候如果要传中文,只能先换成ISO-8859-1的乱码,ftp完成后,再转回UTF-8就又可以得到正常的中文了。


怎么样?编码转换是不是so easy?那该来点正经的了:

[java]  view plain  copy
  1. import java.io.UnsupportedEncodingException;  
  2.   
  3. public class EncodingTest {  
  4.     public static void main(String[] args) throws UnsupportedEncodingException {  
  5.         String srcString = "我们是中国人";  
  6.         String gbk2UtfString = new String(srcString.getBytes("GBK"), "UTF-8");  
  7.         System.out.println("GBK转换成UTF-8:" + gbk2UtfString);  
  8.         String gbk2Utf2GbkString = new String(gbk2UtfString.getBytes("UTF-8"), "GBK");  
  9.         System.out.println("GBK转换成UTF-8再转成GBK:" + gbk2Utf2GbkString);  
  10.     }  
  11. }  
这次我们反过来,先将字符串以GBK编码再以UTF-8解码,再以UTF-8编码,再以GBK解码。

这次的运行结果是:


GBK转换成UTF-8:�������й���
GBK转换成UTF-8再转成GBK:锟斤拷锟斤拷锟斤拷锟叫癸拷锟斤拷


WTF??万恶的“锟斤拷”,相信不少人都见过。这里GBK转成UTF-8乱码好理解,但是再转回来怎么变成了“锟斤拷锟斤拷锟斤拷锟叫癸拷锟斤拷”,这似乎不科学。

这其实和UTF-8独特的编码方式有关,由于UTF-8需要对unicode字符进行编码,unicode字符集是一个几乎支持所有字符的字符集,为了表示这么庞大的字符集,UTF-8可能需要更多的二进制位来表示一个字符,同时为了不致使UTF-8编码太占存储空间,根据二八定律,UTF-8采用了一种可变长的编码方式,即将常用的字符编码成较短的序列,而不常用的字符用较长的序列表示,这样让编码占用更少存储空间的同时也保证了对庞大字符集的支持。

正式由于UTF-8采用的这种特别的变长编码方式,这一点和其他的编码很不一样。比如GBK固定用两个字节来表示汉字,一个字节来表示英文和其他符号。

来测试一下:

[java]  view plain  copy
  1. import java.io.UnsupportedEncodingException;  
  2.   
  3. public class EncodingTest {  
  4.     public static void main(String[] args) throws UnsupportedEncodingException {  
  5.         String srcString = "我们是中国人";  
  6.         byte[] GbkBytes = srcString.getBytes("GBK");  
  7.         System.out.println("GbkBytes.length:" + GbkBytes.length);  
  8.         byte[] UtfBytes = srcString.getBytes("UTF-8");  
  9.         System.out.println("UtfBytes.length:" + UtfBytes.length);  
  10.         String s;  
  11.         for (int i = 0; i < srcString.length(); i++) {  
  12.             s = Character.valueOf(srcString.charAt(i)).toString();  
  13.             System.out.println(s + ":" + s.getBytes().length);  
  14.         }  
  15.     }  
  16. }  
运行结果为:

GbkBytes.length:12
UtfBytes.length:18
我:3
们:3
是:3
中:3
国:3
人:3


可以看到使用GBK进行编码,“我们是中国人”6个汉字占12个字节,而是用UTF-8进行编码则占了18个字节,其中每个汉字占3个字节(由于是常用汉字,只占3个字节,有的稀有汉字会占四个字节。)

UTF-8编码的读取方式也比较不同,需要先读取第一个字节,然后根据这个字节的值才能判断这个字节之后还有几个字节共同参与一个字符的表示。

对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。 

如表: 
1字节 0xxxxxxx 
2字节 110xxxxx 10xxxxxx 
3字节 1110xxxx 10xxxxxx 10xxxxxx 
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。 
实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。 
因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。 

上面一随便看看就好,只要知道“由于UTF-8的特殊编码方式,所以有些序列是不可能出现在UTF-8编码中的”就可以了。


所以当我们将由GBK编码的12个字节试图用UTF-8解码时会出现错误,由于GBK编码出了不可能出现在UTF-8编码中出现的序列,所以当我们试图用UTF-8去解码时,经常会遇到这种不可能序列,对于这种不可能序列,UTF-8把它们转换成某种不可言喻的字符“�”,当这种不可言喻的字符再次以UTF-8进行编码时,他们已经无法回到最初的样子了,因为那些是UTF-8编码不可能编出的序列。然后这个神秘字符再转换成GBK编码时就变成了“锟斤拷”。当然,还有很多其他的巧合,可能正好碰到UTF-8中存在的序列,甚至原本不是一个字符的字节,可能是某个字的第二个字节和下一个字的两个字节,正好被识别成一个UTF-8序列,于是解码出一个汉字,当然这些在我们看来都是乱码了,只不过不是“锟斤拷”的样子。因为不可能序列更普遍存在,所以GBK转UTF-8再转GBK时,最常见的便是“锟斤拷”!


所以:以非UTF-8编码编码出的字节数组,一旦以UTF-8进行解码,通常这是一条不归路,再尝试将解码出的字符以UTF-8进行编码,也无法还原之前的字节数组。

相反地,其他的固定长度编码几乎都可以顺利还原。


=====================2016/11/15补充==========================

上文中其实有一个东西一直在回避,就是既然所有字符在保存时都需要转换成二进制,那么java是使用什么编码来保存字符的呢?这个问题其实我们可以不必深究,因为这对我们是透明的,我们只要假设java使用某种编码可以表示所有字符。得益于这种透明,我们可以当作java是直接保存字符本身的,就如上文所做的这样。但是今天面试的时候被问到了,我说这个是对我们透明所以没有深究。他说虽然是透明的,但是如果弄懂其中的原理还是能加深理解。我马上想到unicode,因为java要准确地表示所有字符,那么只有unicode能胜任了。这个回答也得到面试官的肯定,还说了一些更细节的。每种编码都会提供和unicode编码之间的转换规则。当我们以字符串直接量new一个String,这个String就是以unicode在内存中存储的。同样这也解决了一个让我疑惑的问题:为什么一个char中既可以存储一个字母,也可以存储一个汉字,明明很多编码如GBK、UTF-8中汉字和字母的长度不一样。如果java虚拟机使用unicode编码,那这一切就很好理解了,字母和汉字长度一样。


新增一条结论:java虚拟机中以使用unicode编码保存字符,任何编码都提供了和unicode编码的转换规则。



【编码探秘】从“烫烫烫”到“锟斤拷”:一个Unicode乱码生成器的诞生 本文深入探讨了Unicode乱码现象,特别是经典乱码'锟斤拷'的生成原理。通过分析UTF-8与GBK编码转换的机制,揭示了乱码产生的根本原因,并提供了Python实现的乱码生成器代码示例。文章还介绍了乱码的趣味应用场景和编码最佳实践,帮助开发者更好地理解和处理字符编码问题。 阅读详情

相关推荐

别再只会笑‘锟斤拷’了!手把手教你用Python复现这个经典乱码(附完整代码)

本文深入解析了'锟斤拷'乱码现象的成因,通过Python实战演示了Unicode与GBK编码转换的'暗黑艺术'。从构建乱码生成器到逆向解码,再到生产环境中的编码防御策略,手把手教你处理字符编码问题。文章包含完整代码示例,帮助开发者彻底理解并解决这一经典乱码难题。

weixin_30402343的博客 204

【小玩意】锟斤拷语加密器

锟斤拷语加密器灵感这个乱码咋回事代码实现结语 诗曰:“手持两把锟斤拷,口中疾呼烫烫烫。脚踏千朵屯屯屯,笑看万物锘锘锘。”(狗头) 灵感 前段时间在宿舍楼下刷脸的时候,突然蹦出了一堆乱码。 (保护一下个人信息) 我就寻思,学校这个垃圾系统这是多少年头了,竟有4大乱码之一的“锟斤拷语”。闲来无事,上网查了下原理,准备做一个小加密器。 这个乱码咋回事 Unicode是一直在更新的,在这个过程中,肯定有一些比较新的字符他是无法表示的。或者即使Unicode发布了新版纳入了某个文字,但是很多软件系统并未升级也会有这

salicylic__acid的博客 3422

告别乱码:EncodeConvert v2.0高效实现GBK与UTF-8批量转换

字符编码是计算机处理文本的基础,GBK与UTF-8是中文环境最常遇到的两种编码方案。GBK采用双字节表示汉字,UTF-8则使用变长字节,两者字节序列完全不同,一旦解码规则不匹配,就会出现乱码、锟斤拷等问题。理解编码转换原理,掌握安全的转换方法,对开发者与运维人员至关重要。EncodeConvert v2.0作为一款可视化编码转换工具,提供GBK与UTF-8互转、批量目录扫描、实时预览及备份机制,帮助用户高效处理老旧数据与批量脚本,从根源上避免乱码风险。无论是清理历史文件、统一项目编码,还是解决SQL脚本导入

weixin_28837817的博客 220

java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转乱码问题

作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福。但其实只要明白编码之间的转换规律,其实乱码so easy~我们知道,计算机存储数据都是2进制,就是0和1,那么这么多的字符就都需要有自己对应的0和1组成的序列,计算机将需要存储的字符转换成它们对应的01序列,然后就可以储存在电脑里了。比如我们可以定义用8位2进制表示一个字符,“00000000”表示小写字...

weixin_28909161的博客 2524

手持两把锟斤拷,口中疾呼烫烫烫。 脚踏千朵屯屯屯,笑看万物锘锘锘。

锟斤拷 Unicode和老编码体系的转化过程中,肯定有一些字,用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER。 那么U+FFFD的UTF-8编码出来,恰好是 ‘\xef\xbf\xbd’。如果这个’\xef\xbf\xbd’,重复多次,例如 ‘\xef\xbf\xbd\xef\xbf\xbd’,然后放到GBK/CP936/GB2312/GB18030的环境中显示的话,一个汉字2个字节,最终的结果就是:锟斤拷——锟

Sumarua的博客 4349

基于MFC的汉字编码转换工具:GBK与UTF-8互转实战解析

在Windows桌面开发中,字符集与编码方案是绕不开的基础问题。Unicode为每个字符定义了唯一码点,而GBK、UTF-8等则是具体的编码实现。不同编码之间没有直接映射,必须先将源字节解码为Unicode码点,再按目标编码重新编码。正是由于这种转换机制,MFC开发者常遇到中文乱码,尤其在处理老项目或外部文件时,GBK与UTF-8的互转需求十分普遍。Windows提供的MultiByteToWideChar和WideCharToMultiByte API是稳定可靠的转换基石。本文基于MFC对话框实现一个完整

weixin_28834765的博客 329

java锟斤拷锟斤拷锟_锟斤拷?UTF-8与GBK互转,为什么会乱码?

作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福。但其实只要明白编码之间的转换规律,其实乱码so easy~我们知道,计算机存储数据都是2进制,就是0和1,那么这么多的字符就都需要有自己对应的0和1组成的序列,计算机将需要存储的字符转换成它们对应的01序列,然后就可以储存在电脑里了。比如我们可以定义用8位2进制表示一个字符,“00000000”表示小写字...

weixin_39832965的博客 830

win10 离线安装.Net Framework3.5

起因,安装软件比如3dmax2014等需要.Net Framework3.5支撑,那么需要安装低版本的.Net Framework3.5 闲话少说。 1.下载 NetFx3.cab 链接: https://pan.baidu.com/s/124to7F3BOy4yAlY61OjbDg 提取码: kixu 2.将NetFx3.cab 放入 系统盘的windows目录下(示例 C:\Wi...

m0_37615458的博客 7718

锟斤拷?UTF-8与GBK互转乱码问题

作为一名程序员,肯定有被乱码困扰的时候,真到了百思不得其解的时候,就会觉得:英文程序员真幸福。 但其实只要明白编码之间的转换规律,其实乱码so easy~ 我们知道,计算机存储数据都是2进制,就是0和1,那么这么多的字符就都需要有自己对应的0和1组成的序列,计算机将需要存储的字符转换成它们对应的01序列,然后就可以储存在电脑里了。 比如我们可以定义用8位2进制表示一个字...

dicao3942的博客 1352

ubuntu24.04+RTX5090D 显卡驱动安装

本文详细介绍了在Ubuntu系统中更新内核、安装NVIDIA驱动的步骤。首先,通过mainline工具安装新版内核,并确保GCC版本兼容。接着,在无桌面环境下配置TTY模式,解决中文显示问题。然后,禁用默认的nouveau驱动,安装NVIDIA驱动,并选择开源驱动以避免黑屏问题。最后,重新启用图形界面,并通过测试软件验证显卡功能。整个过程涵盖了内核更新、驱动安装、TTY配置及图形界面恢复等多个关键步骤,适合需要手动配置NVIDIA驱动的用户参考。

妖米的博客 4672

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

UTF-8与GBK互转乱码

Unicode无法表示的字符会用U+FFFD黑色菱形问号,UTF-8为EFBFBD对应GBK为锟斤拷只有猫和师可以正常显示,其他会变成乱码。因为“猫”“师”的GBK编码可以在UTF-8正常显示。

Cs20140905的博客 782

解决倍福ADS通信错误1861和6:一次完整的TwinCAT3路由配置与故障排查实录

本文详细解析了在Linux系统上解决倍福ADS通信错误1861和6的完整流程,包括TwinCAT3路由配置与故障排查。通过实例演示了如何正确配置AMS NetID、使用adstool工具添加静态路由,以及高级网络抓包分析技巧,帮助工程师快速定位和解决通信问题。

weixin_30875157的博客 520

Python文件编码识别与乱码修复实战指南

字符编码是计算机存储与传输文本的基础规则,不同编码方案(如UTF-8、GBK)之间的错配,往往导致文件出现“锟斤拷”或“中”等乱码。要解决这类问题,关键在于准确识别文件真实编码,并遵循正确的转换链路。Python生态提供了charset-normalizer、chardet等高效检测库,配合解码、编码及逆向还原技术,可系统化处理编码识别、批量转换和莫比克码修复。无论是日志文件、CSV导出还是历史遗留的GBK文本,都能通过流式处理和容错机制实现自动化治理。本文从编码原理出发,讲解基于Python的实

weixin_42648844的博客 333

Explorer.exe系统错误,电脑重启后刚开始一段时间正常,过一会桌面任务栏就卡死,可以打开任务管理器

联想E14Win10专业版。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 8050

NX二次开发-用户自定义资源栏选项卡RegisterActivationCallback

NX二次开发-用户自定义资源栏选项卡RegisterActivationCallback

阿飞2018 1385

漫画:如何给女朋友解释什么是“锟斤拷”?

作者 | 漫话编程 本文经授权转载自漫话编程(ID:mhcoding) 周末女朋友出去逛街了,我自己一个人在家看综艺节目,突然,女朋友给我打来电话。 过了一会,女朋友回来了,她拿出手机,给我看了她在超市拍的照片: 要想知道什么是乱码,需要先从计算机编码说起。 字符编码和ASCII 我们经常看一些谍战剧,谍战剧...

优快云资讯 5216

干掉百度Apollo的安装!(Apollo10.0的源码安装)

1、在Apollo10.0的安装手册中,没有再详细给出源码安装的步骤,官方更推荐的是包管理安装,但实际上Apollo10.0仍然是可以进行源码安装的。2、使用源码安装Apollo10.0,比Apollo9.0的源码安装问题要少,整个安装过程更顺畅。3、从Apollo 10.0开始,源码安装和包管理安装采用同一套编译工具,也就是aem。之前只有在进行包管理安装的时候我们才需要安装aem,现在进行源码安装也需要安装aem。

qq_40033030的博客 892

【锟斤拷�⊠是怎样炼成的】——两分钟帮你彻底弄懂计算机的编码原理

GBK和Unicode都有很多使用者,用GBK编写的字符用UTF-8打开就会无法正常显示,Unicode就会用这个替换字符�来展示所有无法展示显示的字符,如果此时再根据UTF-8编码保存,重新使用GBK编码打开,如果有两个�,那么EFBF BDEF BFBD这三个码位对应的就是【锟斤拷】三个字,也就是说两个�相当于一个【锟斤拷】,所以你在看下载的小说等等才会出现【锟斤拷】。

m0_67388084的博客 7008

ADAS方案设计-CAN网络管理与休眠唤醒机制

文章摘要:本文介绍了车载控制系统的五种工作模式及其转换条件,包括睡眠模式、准备睡眠模式、就绪睡眠模式、正常工作模式和重复消息状态。系统唤醒条件包括接收到网络管理报文或电源ON档信号,休眠条件则需满足电源OFF档、功能完成等多重要求。针对下挂节点的网络管理报文发送规则,详细说明了不同状态下的报文发送策略,特别是在哨兵模式、OTA模式等特殊场景下的处理方式。系统在满足休眠条件后会立即停止发送下挂节点网络管理报文,确保电源管理的有效性。

xiandang8023的博客 325

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python模拟锟斤拷等各类乱码

一文搞懂各类乱码出现的成因

小小明-代码实体的专栏 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

“锟斤拷“的前世今生

不管是在工作中还是生活中,相信很多同学都被“锟斤拷”深深的毒害过,比如这样, 这样, 还有这样, 那么究竟是为什么会出现这些奇怪的字符?接下来我们一探究竟! ASCII编码 在计算机底层都是用0和1进行存储的,ASCII编码将所有的字母及符号进行编码后转成二进制的0和1进行存储,字母和符号占1个字节(即8bit),标准的ASCII码规定最高位必须为0,因此ASCII编码只能有128个,转成十进制即为0-127。标准的ASCII码表如下: ASCII码表只有128个字符,对于英语来说已经够用了,但是世

Java旅途 6958

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: 提交表单 将数据由gb2312改为utf-8 POST提交表单乱码问题
下一篇: jQuery next() 方法
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值