根据字节值判断文件的编码方式

源文件编码方式 以下讨论两种常用编译器gcc,cl中对Unicode字面值的实现:GCCgcc中跟编码方式转换有关的三个编译选项:-finput-charset=charset,此选项指定源文件本身的编码方式,默认为UTF-8(有无BOM均可)。例如当我们的源代码文件保存为GBK时,则也应当将此选项的值指定为GBK。-fwide-exec-charset=charset,此选项指定宽字符或宽字符串的字面值常量的内部编码方式,默认为UTF-32或UTF-16,对应wchar_t的宽度。wchar_t的宽度依赖平台实现,win 阅读详情
普通文件,开始就是文件内容,有编码的,开头显示编码的定义。


对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65。

可以据此判断是否是UTF-8编码格式:


File file = new File(path);
InputStream ios = new java.io.FileInputStream(file);
byte[] b = new byte[3];
ios.read(b);
ios.close();
if (b[0] == -17 && b[1] == -69 && b[2] == -65)
  System.out.println(file.getName() + “:编码为UTF-8〃);
else
  System.out.println(file.getName() + “:可能是GBK,也可能是其他编码。”);


如果项目对要判定的文本文件编码不可控(比如用户上传的一些HTML、XML等文本),可以采用一个现成的开源项目:cpdetector 。


最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表: (此段程序尚未经过亲自验证)

EF BB BF  UTF-8
FE FF    UTF-16/UCS-2, little endian
FF FE    UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.

int[] head = new int[4];
        InputStream inputStream = new FileInputStream(path);
        for(int i=0; i<4; i++){

                head[0]=inputStream.read();
        }
        inputStream.close();

String code = "ANSI";
        if (head[0]==0xef && head[1]==0xbb && head[2]==0xbf) {
            code = "UTF-8";
            
        } else if(head[0]==0xfe && head[1]==0xff) {
            code = "utf-16/ucs2, little endian";
            
        } else if(head[0]==0xff && head[1]==0xfe) {
            code = "utf-16/ucs2, big endian";
            
        } else if(head[0]==0xff && head[1]==0xfe && head[2]==0x0 && head[3]==0x0) {
            code = "UTF-32/ucs4, little endian";
            
        } else if (head[0]==0x0 && head[1]==0x0 && head[2]==0xfe && head[3]==0xff) {
            code = "UTF-32/ucs4, big endian";
        }



基于Cadence IC617的共源级放大器设计:从直流到交流的virtuoso仿真实践 本文详细介绍了使用Cadence IC617的Virtuoso平台进行共源级放大器设计的完整仿真流程。从电路图绘制、直流工作点分析,到负载电阻RD的参数扫描及其对增益和带宽的影响,再到交流小信号频率响应仿真,提供了从理论到实践的全面指导,帮助初学者掌握模拟集成电路设计的核心仿真技能。 阅读详情

相关推荐

【论文学习】《Fully-Convolutional Siamese Networks for Object Tracking》2016年SiamFC 全卷积孪生网络用于目标跟踪

在这项工作中,我们脱离了跟踪中采用的传统在线学习方法,并展示了一种专注于在离线阶段学习强嵌入的替代方法。与在分类设置中的使用不同,我们证明,对于跟踪应用,孪生全卷积深度网络能够更有效地使用可用数据。这不仅反映在测试时,通过执行有效的空间搜索,也反映在训练时,其中每个子窗口都有效地代表一个有用的样本,而几乎没有额外的成本。实验表明,深度嵌入为在线跟踪器提供了自然丰富的特征来源,并使简单的测试时策略表现良好。我们相信这种方法是对更复杂的在线跟踪方法的补充,并期望未来的工作能够更彻底地探索这种关系。

SkyLeopard的博客 2418

java中常用字符的字节码与字符对应关系

public static void main( String[] args ) { byte[] b = new byte[] {33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,7...

learnworm的专栏 3302

手把手教你用STM32实现SPWM逆变器控制(附完整代码)

本文提供了一份基于STM32实现SPWM逆变器控制的完整实战指南。文章从硬件选型(如STM32F103C8T6、IR2104驱动器)入手,详细解析了利用定时器TIM1生成SPWM波形的核心原理与代码实现,并涵盖了驱动电路、全桥功率电路及LC滤波器的设计要点与调试技巧,旨在帮助读者从零构建一个可靠的单相全桥逆变器系统。

weixin_29208327的博客 589

Byte的数值范围为何是-128到127

Byte的数值范围为何是-128到127 一、原码、反码和补码 在探讨Byte的数值范围为何是-128到127这个问题前,首先要了解原码、反码和补码的概念。对于一个数字,计算机要使用一定的编码方式进行存储。原码、反码和补码是计算机存储一个具体数字的编码方式,并且最高位(第一位)存放符号,正数为0,负数为1。 1.原码 原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。这里真值表示最高位不存放符号且参与到计算中。 例 [+1] (原) = [0000 0001] [-1 ] (原) = [10

m0_48490906的博客 3939

BES平台集成第三方音频算法避坑指南:以声加ENC为例,聊聊文件放置、内存分配与授权那些事

本文详细解析了在BES平台上集成声加ENC降噪算法的全流程,包括技术选型、系统架构设计、内存管理及量产授权等关键环节。特别针对BES平台的双核架构和内存限制,提供了文件放置、内存分配与授权验证的实用解决方案,帮助开发者高效实现音频算法集成。

weixin_33720956的博客 514

一种基于OpenPose和DNN的跌倒检测软件系统(中文&英文)

学习并实现一种跌倒检测模型,此模型基于OpenPose实现逐帧人体姿态检测,使用DNN识别人体动作。检测方式有在线与离线两种,本文主要测试了离线模式,测试效果较好。

Tongzhou_Li的博客 2644

判断文件是否UTF-8编码

    判断文件是否UTF-8编码: 对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65   InputStream fis = fileItem.getInputStream(); byte[] buf = new byte[fis.available()]; fis.read(buf); fis.close(); if ...

fireinjava的专栏 654

MRI图像切片(nii格式转2D)

代码参考:将一个MRI(nii格式)数据进行切片 想要批量抽取MRI数据的几个切片,借鉴了上述代码的Python版本,原始代码抽取了全部切片。本次实验主要是抽取sMRI的横断面(axial)方向的其中30张切片,数量根据自己需求可自行设置。 import scipy, numpy, shutil, os, nibabel import sys, getopt import imageio def niito2D(filepath): inputfiles = os.listdir(filep

chs_502的博客 7549

Java 判断字节流是否是 UTF8 编码

遇到本来设计时使用 GBK 编码处理的地方,在实际使用过程导入了 UTF8 编码,造成了显示文本为乱码的现象,在了解 UTF8,GBK 编码和 Unicode 标准之后,编写了 Java 判断字节流是否是 UTF8 编码的程序,如果是 UTF8 编码,则转换成 GBK 编码。

quanzhan_King的博客 2212

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

大数据领域数据架构的工业互联网数据架构设计

工业互联网作为第四次工业革命的重要驱动力,正在深刻改变传统制造业的生产方式和商业模式。本文旨在探讨工业互联网环境下的大数据架构设计,重点解决工业数据采集、传输、存储、处理和分析等关键环节的技术挑战。工业互联网数据架构的核心组件大数据技术在工业场景下的应用数据治理和质量控制边缘计算与云计算的协同架构背景介绍:建立基本概念和问题域核心架构:详细解析工业互联网数据架构技术实现:通过代码和数学模型展示关键技术实践案例:展示真实场景应用工具资源:推荐实用开发工具和学习资源。

软件工程实践的博客 855

字节bytes,编码和解码

00000000 :8位代表一个字节bytes gbk编码(国标扩):一个中文占用2个字节 utf-8(万国码):一个中文占用3个字节 gbk和utf-8不能直接进行转换,否则会出现乱码(因为他们的字节占用不一样) # bytes,编码和解码 # asci码 s='周杰伦' s1 = s.encode('gbk') print(s1) # 输出:b'\xd6\xdc\xbd\xdc\xc2\xd7' # gbk编码,一个中文占2个字节,所以这里3个中文,占用6个字节 s2 = s.encode(

wanggaoxingH的博客 3505

科研生产力革命:手把手教你打造基于大模型的Research Agent(文献调研+论文写作+思路激发)

本文介绍了如何利用Research Agent(科研智能体)提升科研效率。Research Agent能自主完成文献检索、信息整合和报告生成全流程,省去50%以上的基础工作时间。文章详细讲解了搭建运行环境的方法,包括工具准备和MetaGPT配置,并提供了两种实战方案:基础版Search-O1和专业版MetaGPT Research Agent。此外,还介绍了如何为垂直领域定制Agent,以及优化检索效果、改善报告逻辑等技巧。最后列举了学术研究、行业分析、内容创作和个人学习四大应用场景,帮助用户将AI从聊天工

LXY_LOVE36的博客 266

判断TXT文件编码方式

import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; /** * describe:和文件相关的操作类 * * @author liuli * @date 2019/02/25 */ public class MyFileUtil { //判断编码格式方...

meilishiguang的博客 1324

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

计算机控制技术及应用

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

文本文件的编码方式判断

11. 如何判断一个文本文件是ANSI还是Unicode? 判断如果文本文件的开头两个字节是0xFF和0xFE,那么就是Unicode,否则是ANSI。 12. 如何判断一段字符串是ANSI还是Unicode? 用IsTextUnicode进行判断。IsTextUnicode使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此,IsTextUnicode有可能

u011519500的专栏 2903

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

位、字节、字、寻址能力、编码方式、大端小端

CPU按照其处理信息的字长可以分为:八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器等。 CPU最大能查找多大范围的地址叫做寻址能力,CPU的寻址能力以字节为单位,如32位寻址的CPU可以寻址2的32次方大小的地址也就是4G,这也是为什么32位的CPU最大能搭配4G内存的原因,再多的话CPU就找不到了。 总线一般被设计来传输固定大小的一块数据,这块数据被称为字(word),一个字...

natural_Caduceus 3633

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何判断文件的编码方式

最近做东西需要知道文件(txt,html...)究竟是什么编码方式,不然读取文件内容可能出现乱码: 经过网上查找发现两种总结一下,方便自己也方便别人: ①通过判断文件头,不过文件头不是必须的,所以有些文件是没有文件头的 /* EF BB BF    UTF-8 FE FF     UTF-16/UCS-2, little endian

ZeroCode 8024

C++中宽字节的编码方式

C++中宽字节的编码方式 C++中宽字节的编码方式 Unicode,UTF-8,UTF-16 完整的说明参见 Wiki。简单来说,Unicode 定义了所有可以用来表示字符的数值集合(称之为 Code Point),而UTF-8 和 UTF-16 等 UTF 标准定义了这些数值和字符的映射关系--Unicode的具体实现。 UTF-8 优势:UTF-8 没有字节序的...

Cgengzhihui的博客 1172

易语言写出文件、写出字节集编码方式

易语言写出文件、写出字节集编码方式

荒村瘦马的博客 3142

java字节输入流如何添加编码方式

我整理的一些关于【java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Java字节输入流如何添加编码方式的项目方案 引言 在Java中,文件操作是最常见的任务之一。字节输入流是处理文件的一个基本方式,通过字节输入流,我们可以从文件中读取数据。然而,直接读取字...

weixin_42531396的博客 172

java通过判断文本的编码方式再读取文件

原理:了解utf8的编码方式 可以判断该文本是否是utf8编码的 参考:http://www.iteye.com/topic/398782             http://www.iteye.com/topic/191552             http://bbs.youkuaiyun.com/topics/240042395   代码: import java.io.Buffere

chiwang1984的专栏 387

python中的文件编码方式

python的初学者一般会对python中的中文字符串的处理方式比较费解,本文将结合具体的实验解决大家的这一困惑。 一、源代码中的编码方式分析 先举一个简单的例子,创建一个名为test.py的文件,内容如下 s = '中文' print s运行文件会报如下错误, File "D:/lsc/study/python code/test_python/test_unicode.py", l

linshengchao123的专栏 2003

Python中读取与写入文件时的编码方式

在与中提到通过文件对象调用read()函数和write()函数实现文件的读写。以上方法能够正确地取或写入英文时,当要读写的内容是中文时,则需要考虑编码方式。

hou09tian的博客 5651

字符集、编码方式

- 编码:将字符转换成二进制数组成的字节序列 - 解码:将二进制数组成的字节序列转换成字符 字符集定义能够表示哪些字符,编码方式定义如何将这些字符映射为字节序列,并不等同 在选择使用某种字符集时,也需要考虑使用哪种编码方式,以确保数据的正确存储和传输

m0_45690923的博客 2075

6. 常见的文件编码方式及查看网页源码的编码方式

Unicode在制定时计算机容量已不是问题,所以设计成了固定两个字节,所有的字符都用16位表示,包括之前只占8位的英文字符等,所以会造成空间的浪费,因此Unicode在很长的一段时间内都没有得到推广应用。为了自己的语言能在计算机中正常显示,每个国家和地区都有各自的编码,所以编码多了谁也不认识对方的编码,这时候ISO组织就提出了一种新的编码叫UNICODE编码让全球的文化、字符、符号都能支持。如果要表示中文,UTF-8编码效率要低于GBK,高于UTF-16,所以它也是除了GBK之外最理想的编码方式。

weixin_63986098的博客 4048

文本文件编码方式的简单识别

 在实际编程中经常会碰到需要读取一个文本文件的内容并将其显示到程序中的情况。如果文件中所有的内容都以ASCII方式编码固然简单(通常包含英文字母和数字的文件,比如readme之类),但遇到包含其他语言字符,如中文和日文之类就必须在显示之前知道其编码方式。这是因为很多程序在显示文本内容时只接受UNICODE,故我们必须对非UNICODE的编码方式进行转换。由于谈到UNICODE时通常讨论的都是UCS

punpuny的专栏 5808
上一篇: String.valueOf()的参数问题
下一篇: application/x-www-form-urlencoded与multipart/form-data(尚未自己验证)
saygoodbyetoyou
博客等级 码龄17年 78粉丝 27原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值