go语言判断文件是否为UTF8编码

2023-05-16

一、思路:

1、UTF8编码规则:

对于单字节字符,8个比特位最高位为0

对于多字节字符,若字符由n个字节组成,则第一个字节8个比特中最高n位都是1,剩下n-1字节中最高位都是10

2、读取文件得到字节流

3、判断是单字节字符还是多字节字符

4、定义计数器nBytes,遍历每个字节,将字节与0x80进行与运算判断,结果为0,单字节字符,没毛病。结果不为0,用nBytes记录最高位出现的1的个数,然后判读剩下n-1个字符最高位是否10,将n-1字节分别与0xc做与运算,若有一个不满足直接返回false,否则每次nBytes--,最后根据nBytes是否为0判断是否为U8编码。

二、代码实现

package main

import (
	"io/ioutil"
	"fmt"
)

func validUTF8(buf []byte) bool{
	nBytes := 0
	for i:= 0;i<len(buf);i++{
		if nBytes == 0{
			if (buf[i] & 0x80) != 0 {  //与操作之后不为0,说明首位为1
				for (buf[i] & 0x80) != 0 {
					buf[i] <<= 1 //左移一位
					nBytes++ //记录字符共占几个字节
				}

				if nBytes < 2 || nBytes > 6 { //因为UTF8编码单字符最多不超过6个字节
					return false
				}

				nBytes-- //减掉首字节的一个计数
			}
		}else{ //处理多字节字符
			if buf[i] & 0xc0 != 0x80{ //判断多字节后面的字节是否是10开头
				return false
			}
			nBytes--
		}
	}
	return nBytes == 0
}
func main(){
	b,err := ioutil.ReadFile(`test.txt`)
	if err != nil{
		fmt.Println(err)
	}
	fmt.Println(validUTF8(b))
}

三、测试

返回 true

返回 false

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go语言判断文件是否为UTF8编码 的相关文章

  • 使用 python 将所有 csv 文件从编码 ansi 转换为 utf8

    我有Python代码如下 import os from os import listdir def find csv filenames path to dir suffix csv filenames listdir path to di
  • 无效的 PHP JSON 编码

    我正在 PHP 5 3 1 中的一个项目中工作 我需要将 JSON 字符串发送到 web 服务 在 python 中 但是从 json encode 获得的结果不会作为有效的 JSON 传递 我正在使用 JSLint检查有效性 我应该补充一
  • VBA 从 Web 服务器导入 UTF-8 CSV 文件

    我有一个 UTF 8 CSV 文件存储在 Web 服务器上 当我下载文件时 将其放在硬盘上 然后使用此宏 从宏记录器 将其导入到 Excel 工作表中 Sub Macro2 Workbooks OpenText Filename C myF
  • 当存在 UTF-8 字符编码时,显示引号的问号图标

    由于某种原因 我添加后 在我的头标签之间 某些符号 即引号 显示为中间带有问号的菱形图标 就好像没有找到该符号一样 有人知道怎么回事吗 您的文本编辑器正在以某种非 UTF 8 很可能是 CP1252 的编码保存文件 包括引号 将文件实际转换
  • strtolower() 用于 unicode/多字节字符串

    我的页面中有一些非英语 外语文本 但是当我尝试将其变为小写时 它的字符会转换为包含问号的黑色菱形 a echo b strtolower a returns 我已在元标记中设置了字符集 但这并没有解决问题 我该怎么做才能将字符串转换为小写而
  • 什么是 Unicode、UTF-8 和 UTF-16?

    Unicode 的基础是什么 为什么需要 UTF 8 或 UTF 16 我在谷歌上研究过这个问题 也在这里搜索过 但我不清楚 In VSS https en wikipedia org wiki Microsoft Visual Sourc
  • 将 UTF-8 编码的转储加载到 MySQL 中

    昨天我为这个问题苦苦思索了几个小时 我在 MySQL 4 1 22 服务器上有一个数据库 编码设置为 UTF 8 Unicode utf8 如 phpMyAdmin 报告 该数据库中的表的默认字符集设置为latin2 但是 使用它的 Web
  • “流不包含有效的 UTF-8”是什么意思?

    我正在创建一个简单的 HTTP 服务器 我需要读取请求的图像并将其发送到浏览器 我正在使用这段代码 fn read file mut file name String gt String file name file name replac
  • 如何绕过mysql中无效的utf8字符串

    我有一个包含阿拉伯文本数据的大文本文件 当我尝试将其加载到 MySQL 表中时 出现错误消息Error code 1300 invalid utf8 character string 这是我到目前为止所尝试过的 LOAD DATA INFI
  • Python:UnicodeDecodeError:“utf8”编解码器无法解码字节

    我正在将一堆 RTF 文件读入 python 字符串中 在某些文本上 我收到此错误 Traceback most recent call last File 11 08 py line 47 in
  • Pandas.read_csv() 列名称中带有特殊字符(重音符号)�

    我有一个csv包含一些带有列名称的数据的文件 时期 IAS brut IAS liss 发生率 哨兵 我对第三个有疑问 IAS liss 这是被误解的pd read csv 方法并返回为 那个角色是什么 因为它在我的烧瓶应用程序中生成错误
  • L"" 和 u8"" 之间的区别

    以下有什么区别吗 auto s1 L 你好 auto s2 u8 你好 Are s1 and s2指的是同一类型 如果不是 有什么区别以及首选哪一个 它们不是同一类型 s2是 UTF 8 或窄字符串文字 这C 11标准草案 http www
  • 匹配所有 utf-8/unicode 小写字母形式的正确正则表达式是什么

    我想匹配all拉丁语块中的小写字母形式 简单的 a z 仅匹配 U 0061 和 U 007A 之间的字符 而不匹配所有其他小写形式 我想匹配所有小写字母 最重要的是 EFIGS 语言中使用的拉丁语块中的所有带重音的小写字母 a z 是一个
  • JavaScript blob 编码为 UTF-8 而不是 ANSI

    我使用 JavaScript blob 创建一个 FDF 文件 该文件打开并填充本地存储的 PDF 但是 本地存储的 PDF 的文件路径包含重音字符 并且我无法编辑文件夹名称 当文件夹路径不包含重音符号时 此代码有效 并且如果我在记事本中打
  • UTF8 vs. UTF16 vs. char* vs. 什么?谁来给我解释一下这个烂摊子!

    我已经设法忽略所有这些多字节字符的东西 但现在我需要做一些 UI 工作 我知道我在这方面的无知将会赶上我 谁能用几段或更少的内容解释我需要知道什么 以便我可以本地化我的应用程序 我应该使用什么类型 我同时使用 Net 和 C C 并且我需要
  • 如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容?

    如何删除除以下内容之外的所有内容 字符串中的字母 数字 空格 感叹号 问号 该方法支持国际语言 UTF 8 非常重要 您可以使用正则表达式 myString replace w s g 这将替换除单词字符 空格 感叹号或问题之外的所有内容
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 在python中打开带有重音符号的文本文件

    我尝试使用 Python 2 7 打开法语文本文件 我使用了命令 f open textfr r 但是当我使用 f read 我失去了重音字符 我明白了u J xc3 xa9tais xc3 xa0巴黎而不是J tais 巴黎等 当在lin
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 如何在 R 中的 dygraph 标题中使用 UTF-8 字符

    使用 Rstudio Windows8 当我使用 dygraph 函数绘制时间序列时 在尝试在主标题中使用 UTF 8 字符时遇到问题 library dygraphs dygraph AirPassengers main T tulo 这

随机推荐

  • IDEA中设置默认Maven配置

    一 每次打开项目时修改maven配置 xff08 默认的maven地址可能不是我们想要的 xff0c 可以通过下面方法修改 xff09 二 配置默认的地址 第一种方法太麻烦 xff0c 每次打开项目都需要配置maven xff0c 我们可以
  • sql server 2014下载及安装步骤—图解

    注意 xff1a 1 Win10之后的系统 xff0c 在安装之前需要安装 net framework 3 5 sp1 xff0c 以免后续安装报错 2 Express版本为缩减版 xff0c 无SSMS xff0c 需自行下载 xff0c
  • win11安装IIS步骤—图解

    1 使用快捷键win 43 r 输入control 打开控制面板 xff0c 然后点击程序 xff0c 选择启用或关闭Windows功能 xff0c 勾选Internet Information Services 默认安装IIS 2 通过
  • SqlServer怎么计算两个日期之差,精确到毫秒计算

    DateTime xff1a 字段类型对应的时间格式是 yyyy MM dd HH mm ss fff xff0c 3个f xff0c 精确到1毫秒 ms xff0c 示例 2023 01 07 10 06 15 433 DateTime2
  • 直接在浏览器中访问程序无问题,在IIS中点击浏览网站无反应

    问题 xff1a 直接在浏览器中访问程序无问题 xff0c 在IIS中点击浏览网站无反应 解决方案 xff1a 在设置中点击应用后设置默认的浏览器
  • 在IIS中发布NetCore程序

    需安装的软件 xff0c 如下图所示 软件下载地址 xff1a https dotnet microsoft com en us download dotnet 注意 xff1a 发布的程序版本必须和本地安装的一致 xff0c 否则会报错
  • PotPlayer优化与最高画质设置(最强本地播放器)

    一 前言 软件 xff1a PotPlayer 描述 xff1a 被誉为本地视频最好用的播放器 xff01 PotPlayer下载地址参考 xff1a https potplayer org 推荐Potplayer论坛 xff1a http
  • 基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟

    基于51单片机 74HC595移位寄存器 8位数码管时钟 Proteus仿真 实例代码 span class token macro property span class token directive hash span span cl
  • 51单片机外部中断使用示例程序

    51单片机外部中断使用示例程序 本实例来源以STC89演示示例 xff0c 为了方便初学者更好的阅读 xff0c 直接将其贴出来 首先分享一份 STC单片机资源一览表 你也可以从https www stcisp com 下载到 xff0c
  • 使用kubeadm部署kubernetes集群

    一 安装环境准备 1 安装环境 xff1a centos7 5 xff0c 一个master节点 xff0c 两个node节点 CentOS Linux release 7 5 1804 Core 2 设置 etc hosts文件的IP和主
  • 【Proteus仿真】51单片机自定义倒计时

    Proteus仿真 51单片机自定义倒计时 Proteus仿真 类似一个时间闹铃的一个功能 只不过这是只是一个用来倒计时的 程序源码 span class token comment 实验说明 实验接线 1 动态数码管模块 gt 单片机管脚
  • 微信小程序云开发之数据库操作

    一 初始化 xff1a 在做数据的操作 xff08 增删改查 xff09 之前 xff0c 先要获取数据库的对象 xff0c 可以通过wx cloud database函数来获取到 xff0c 这个函数默认会使用wx cloud init方
  • QT中QTablewidget表格常用操作

    QTabwidget常用操作 0 QTableWidget初始化示例1 列设置 xff08 表头 xff09 1 1 添加表头1 2 设置表头样式 xff08 颜色和字体 xff09 1 3 设置表头宽度1 4 自适应表头宽度1 5 设置表
  • qt获取天气代码

    qt显示天气信息 1 发送网络请求获取天气数据1 1 需要包含的头文件1 2 创建QNetworkAccessManager对象1 3 发送请求1 4 获取数据并解析 2 天气JSON格式数据3 demo代码4 最终效果 1 发送网络请求获
  • qt弹窗界面模态设置

    1 模态说明 模态 xff1a 启动模态界面时 xff0c 例如弹出对话框强制用户从其他正在进行的业务中聚焦到当前对话框 xff0c 除了该对话框整个应用程序窗口都无法接受用户响应 xff0c 无法切换界面 xff0c 无法切换当前Qt应用
  • QTabWidget常用样式设置

    1 前言 个人使用qt xff0c 感觉QTabwidget是个非常好用的控件 xff0c 但有时候总是感觉其tab样式不好控制或说不够灵活 xff0c 从而导致放弃使用该控件 比如说 xff0c 标签横向显示的时候 xff0c 文字随之也
  • qt环形进度条控件设计

    上效果 推荐文章 xff1a qt电池控件设计 xff1a https blog csdn net weixin 42887343 article details 113932145QWidget控件拖动 xff1a https blog
  • GPL协议认识

    图片链接 xff1a https www runoob com w3cnote open source license html GPL协议 1 GPL GNU General Public License xff0c GNU通用公共许可协
  • C++中的Lambda函数

    Lambda函数也叫匿名函数 xff0c 是自定义函数的一种 专指用关键字 lambda 定义的无名短函数 xff0c 所以也有Lambda表达式这种说法 这种函数得名于省略了用def声明函数的标准步骤 xff0c 是C 43 43 11中
  • go语言判断文件是否为UTF8编码

    一 思路 xff1a 1 UTF8编码规则 xff1a 对于单字节字符 xff0c 8个比特位最高位为0 对于多字节字符 xff0c 若字符由n个字节组成 xff0c 则第一个字节8个比特中最高n位都是1 xff0c 剩下n 1字节中最高位