文件编码、转换、乱码问题

文件编码

用来表示文本内容的字符集和字符编码方式,决定了在文本文件中使用的字符集和字符的二进制表示方式。常见的文件编码包括 UTF-8、UTF-16、ASCII、ISO-8859-1 等。选择文件编码时,需要考虑到所支持的字符集范围、编码方式对特定语言的支持程度以及文件大小等因素。

服务器编码

服务器用于传输数据的编码方式。常见的服务器编码包括 UTF-8、UTF-16、ASCII、ISO-8859-1 等当浏览器向服务器请求数据时,服务器需要确定将数据以何种编码方式发送。通常服务器会检查请求的 HTTP 头部信息中的 Accept-Encoding 字段,以确定客户端支持的编码方式,然后选择相应的编码方式将数据传输给客户端。

文件编码和服务器编码 什么关系

文件编码决定了文件的内容如何存储,而服务器编码则影响了数据在传输过程中的格式。如果文件是以 UTF-8 编码保存的,而服务器又根据请求选择了压缩传输(比如 gzip 压缩),则服务器在传输文件内容时可能会先将 UTF-8 编码的文件进行压缩,然后再发送给客户端

确保文件编码和服务器编码相互兼容避免在数据传输过程中出现乱码或者不正确解析的问题

文件乱码

文件乱码通常是因为文件的实际内容和读取或解析该内容的编码存在不匹配,导致无法正确解释字符的编码方式。以下是一些常见的导致文件出现乱码的情况:

  1. 文件编码方式!=解码方式: 如果文件实际的编码方式与使用的解码方式不匹配,就会导致乱码。例如,用 UTF-8 编码保存的文件,但使用了其他编码(如 ANSI、GBK)来解码读取文件内容,就可能导致乱码。

  2. 文件损坏或损坏的数据传输: 文件在传输过程中可能会损坏,导致部分数据丢失或损坏。这可能发生在文件传输时出现网络问题或存储介质损坏等情况下。

  3. 软件解析错误: 有时文件内容包含特殊字符或格式,但解析该文件的软件或工具无法正确处理这些字符或格式,导致乱码显示。

  4. 错误的文本处理方式: 在处理文本文件时,如果不正确地处理了特殊字符(例如换行符、制表符等),或者在进行文本编辑时使用了不受支持的字符或格式,可能会导致文件乱码。

  5. 文件类型和扩展名不匹配: 如果文件的实际内容与文件扩展名或类型不匹配,某些软件可能会尝试使用不正确的方式解析文件内容,导致乱码。

乱码问题的本质 是写文件时 Encoding方式和解析文件时的encoding不一致。比如GBK的文件 用UTF-8进行解析。但服务器编码方式是控制传输,也就是说,传输方式并不是乱码的原因。比如UTF-8的文件,用GBK的服务器传输、接收,但使用相同的UTF-8进行解析,文件也不会乱码。重点在于 写、读的编码一致。

如何正确的将GBK转UTF-8(实际上是unicode转UTF-8)
//源码文件是GBK格式,或者这个字符串是从GBK文件中读取出来的
string gbkstr ="你好!”
//利用getBytes将unicode字符串转成UTF-8格式的字节数组
byte[] utf8Bytes = gbkstr.getBytes("UTF-8")
//然后用utf-8 对这个字节数组解码成新的字符串
String utf8str = new String(utf8Bytes,"UTF-8");

//简化后代码
func unicodeToUtf8 (string s)  {
//保证 写str用utf-8 ,文件转换用utf-8 ;所以第一个参数不是GBK 
return new String( s.getBytes("utf-8") ,"utf-8");
}

避免文件乱码

确保文件的编码方式和使用的解码方式相匹配

在文件传输或处理过程中保持数据的完整性

如何查看文件、服务器编码

file -i filename

locale

#en_US.UTF-8 表示使用美国英语环境且字符编码为 UTF-8。
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/167005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis--字符串

基础概念 字符串、数字,都会转化为字符串来进行存储 以二进制的方式存储在内存中 key的命名规范 key不宜过长,消耗内存,且在数据查找的这类键值的计算成本高(通过hash计算来查找)不宜过短,可读性查值一…

多视图聚类的论文阅读(一)

当聚类的方式使用的是某一类预定义好的相似性度量时, 会出现如下情况: 数据聚类方面取得了成功,但它们通常依赖于预定义的相似性度量,而这些度量受原始方法的影响:当输入维数相对较高时,往往是无效的。 1. Deep Mult…

【数据结构初阶】单链表SLlist

描述 不同于顺序表,顺序表的数据是存储在一个连续的空间里的 而链表它是链接起来的结构体地址。 所以我们不用像顺序表一样先创建一块空间出来,而是创建一个能存数据节点和节点与下一个节点之间的连接; 所以:“一个能存数据节点…

2023年11月界面制作软件合集,新手也能学会!

在今天的互联网时代,有各种界面制作软件可供选择。这些软件可以帮助新手和专业人士创建精美且高效的界面设计。从最基础的拖拽操作到复杂的编程接口,不同的软件提供了一系列的功能和特性,满足了各种需求。我们将在本文中探讨8大神器&#xff…

MySql操作

Mysql数据库项目学习笔记 1.条件查询后排序 (SELECT counter : 0) temp设定临时变量ORDER BY id ASC用于将id以升序形式进行排列 SELECTcounter : counter 1 AS ROW,username,type,content FROMtest_info,( SELECTcounter : 0 ) temp WHEREusername 2 AND type 3 ORDER BYi…

JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素

例如&#xff0c;下面这段请求的xml代码&#xff0c;在元素body下面又多了一层&#xff0c;嵌套了4个元素&#xff1a; <?xml version"1.0" encoding"UTF-8"?><request><reqtype>04</reqtype><secret>test</secret>…

庖丁解牛:NIO核心概念与机制详解 01 _ 入门篇

文章目录 Pre输入/输出Why NIO流与块的比较通道和缓冲区概述什么是缓冲区&#xff1f;缓冲区类型什么是通道&#xff1f;通道类型 NIO 中的读和写概述Demo : 从文件中读取1. 从FileInputStream中获取Channel2. 创建ByteBuffer缓冲区3. 将数据从Channle读取到Buffer中 Demo : 写…

Idea 中 Git 不提交当前分支修改代码并切换分支

1、当前分支修改代码切换分支 日常开发中&#xff0c;我们可能会碰到我们正在修改当前 01 分支的代码&#xff0c;突然要去修改另外一个 02 分支的代码情况&#xff0c;而我们 01 分支写的代码还未经过测试&#xff0c;并不能马上提交&#xff0c;这个时候我们切换到 02 分支就…

记一次线上bug排查-----SpringCloud Gateway组件 请求头accept-encoding导致响应结果乱码

基于公司的业务需求&#xff0c;在SpringCloud Gateway组件的基础上&#xff0c;写了一个转发服务&#xff0c;测试开发阶段运行正常&#xff0c;并实现初步使用。但三个月后&#xff0c;PostMan请求接口&#xff0c;返回异常&#xff0c;经排查&#xff0c;从日志中获取到转发…

使用Docker/K8S/Helm部署项目流程

假设项目已经开发完成&#xff0c;部署流程如下&#xff1a; 一、制作镜像&#xff1a; 1、创建nginx配置文件default.conf server {listen 80;server_name localhost; # 修改为docker服务宿主机的iplocation / {root /usr/share/nginx/html;index index.html ind…

element-ui中怎样使用iconfont的图标

1 登录 https://www.iconfont.cn/ 2 搜索合适的图 这里可以找到这个图所在的图库。这样就可以一次查找到对应的所有同款图标 3 选择同款加入购物车 4 将购物车的icon加入项目&#xff0c;注意是新建项目&#xff0c;除非你是确定需要前面已经加过的icon 5 下载icon 选择fon…

日期相关整理

3214. 节日 有一类节日的日期并不是固定的&#xff0c;而是以“a 月的第 b 个星期 c ”的形式定下来的&#xff0c;比如说母亲节就定为每年的五月的第二个星期日。 现在&#xff0c;给你 a,b,c 和 y1,y2&#xff0c;希望你输出从公元 y1 年到公元 y2 年间的每年的 a 月的第 b 个…

为什么越来越多人选择学习Python?

今天我要和大家聊聊一个很热门的话题&#xff1a;为什么那么多人学习Python&#xff1f; 最近小编发现一个有趣的现象&#xff0c;高中生们居然在学校课程里学Python&#xff0c;这不仅给我们这些已经毕业多年的人当头一棒&#xff0c;更是彻底颠覆了传统观念。现在的高中生竟…

Embedding技术与应用(4): Embedding应用工程探析

编者按&#xff1a;随着互联网内容数量的急剧增长&#xff0c;个性化推荐已成为各大科技公司的核心竞争力之一。那么&#xff0c;如何构建一个可靠、高效的基于嵌入技术的推荐系统&#xff0c;使其能够在实际生产环境中正常运行呢&#xff1f;这是所有从业者都关心的问题。 本文…

(一)RISC-V 指令集及寄存器介绍

1. RISC-V指令集介绍 RISC-V 念作 “risk-five”&#xff0c;代表着 Berkeley 所研发的第五代精简指令集。 该项目 2010 年始于加州大学伯克利&#xff08;Berkeley&#xff09;分校&#xff0c;希望选择一款 ISA用于科研和教学。经过前期多年的研究和选型&#xff0c;最终决定…

UE TransformVector 学习笔记

假如算现在枪的位置&#xff0c;那么就是先拿人的位置再拿枪在本地的相对位置相加&#xff0c;就是枪的位置&#xff0c;也就是枪在场景中的位置&#xff0c;那么这里还可以写成Actor的变化和枪的相对位置连在TransformVector上&#xff0c;返回的就是枪的场景位置 这里做反算&…

统一身份认证平台之SSO建设

前言 上篇说道Passwordless无密码技术&#xff0c;也提到了数字时代密码管理的难度&#xff0c;其实在日常的生活中&#xff0c;很多用户也会因为忘记某些网站的登录密码而烦恼。为了方便记忆&#xff0c;很多人都在不同的站点使用相同的用户名和密码&#xff0c;虽然也可以减少…

PS太难学,这款软件更简单!——Lightroom

今天&#xff0c;我们来谈谈Adobe Photoshop Lightroom软件&#xff0c;它是当今数字拍摄工作流程中不可或缺的一部分。现在您可以快速导入、处理、管理和展示图像 — 从一张照片到所有照片。增强的校正工具、强大的组织功能以及灵活的打印选项可以帮助您加快速度。 Adobe Pho…

redis集群(Cluster)

文章目录 前言一、资源准备二、redis安装二、启动redis三、构建集群 前言 redis 集群三种方式&#xff1a;主从复制&#xff0c;哨兵模式&#xff0c;Cluster集群。 本文只介绍Cluster集群部署方案。 一、资源准备 服务器1台&#xff08;正常应该是3台,每台2个节点&#xff…

源启容器平台KubeGien 打造云原生转型的破浪之舰

云原生是应用上云的标准路径&#xff0c;也是未来发展大的趋势。如何将业务平滑过渡到云上&#xff1f;怎样应对上云期间的各项挑战呢&#xff1f;中电金信基于金融级数字底座“源启”打造了一款非常稳定可靠、多云异构、安全可控、开放灵活的容器平台产品——源启容器平台Kube…