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

文件编码

用来表示文本内容的字符集和字符编码方式,决定了在文本文件中使用的字符集和字符的二进制表示方式。常见的文件编码包括 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=

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于ASO优化的分步入门指南2

1、分析元数据。 分析我们收集的当前元数据和关键词,单独跟踪关键字词,然后跟踪组合。例如如果应用程序的标题是关于音乐的应用,则需要跟踪“音乐”、“听”、“听音乐”等关键词。填充元数据分析选项卡,使用搜索分数、下载影响和…

【Mysql学习笔记】1 - Mysql入门

一、Mysql5.7安装配置 下载后会得到zip 安装文件解压的路径最好不要有中文和空格这里我解压到 D:\hspmysql\mysql-5.7.19-winx64 目录下 【根据自己的情况来指定目录,尽量选择空间大的盘】 添加环境变量 : 电脑-属性-高级系统设置-环境变量,在Path 环境变量增加mysq…

wpf devexpress添加TreeListControl到项目

此教程示范如何添加TreeListControl到项目和绑定控件自引用数据源: 添加数据模型 绑定tree,并添加如下字段到数据源对象: Key字段包含唯一值索引节点 Parent字段包含父索引节点 添加数据模型(Employee和Staff类)到…

【C++】【Opencv】cv::Canny()边缘检测函数详解和示例

Canny边缘检测是一种流行的边缘检测算法,由John F. Canny在1986年开发。它是一种多阶段过程,包括噪声滤波、计算图像强度的梯度、非最大值抑制以及双阈值检测。本文通过函数原型解读和示例对cv::Canny()函数进行详解,以帮助大家理解和使用。 …

基于SSM的“鲜花”电子商务平台设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

MES管理系统与ERP系统的实施顺序与决策

在现今的数字化时代,制造企业纷纷寻求通过先进的系统来提升运营效率。其中,ERP管理系统与MES管理系统被誉为是数字化转型的两大利器。然而,在推进这两个系统时,企业常常面临一个关键问题:究竟应该先实施哪一个系统&…

vite vue3配置eslint和prettier以及sass

准备 教程 安装eslint 官网 vue-eslint ts-eslint 安装eslint yarn add eslint -D生成配置文件 npx eslint --init安装其他插件 yarn add -D eslint-plugin-import eslint-plugin-vue eslint-plugin-node eslint-plugin-prettier eslint-config-prettier eslint-plugin…

基于操作系统讨论Java线程与进程、浅谈Go的线程与管程

文章目录 操作系统中的进程进程概念进程的状态 Java中的进程Java进程的概念Java进程的特性Java进程的状态Java进程与操作系统进程的通信 操作系统的进程和Java进程的区别联系操作系统进程Java 进程区别和联系 操作系统中的线程动机优点多核编程 Java中的线程定义:特…

网页开发如何实现简易页面跳动/跳转,html课堂练习/作业,页面ABC的相互跳转

先建一个文件夹&#xff0c;文件夹包含三个文件夹&#xff0c;三个文件夹分别包含各自的代码。(可以只建一个文件夹&#xff0c;文件夹包含各页面代码) 页面1的代码&#xff1a; <head> <meta http-equiv"Content-Type" content"text/html; charsetu…

安装R和Rstudio

目录 一、安装R 二、安装Rstudio 一、安装R R官网&#xff1a;官网链接 点击CRAN 选择一个镜像 我用的winows&#xff0c;所以我选择 download R for windows 进去之后选择 base 点击下载 找到刚才下载的可执行文件&#xff0c;安装 选择语言 下一步 选择一个位置安装 下一…

unexpected end of stream on

SpringCloud使用FeignClient调用第三方接口报错unexpected end of stream on ; 解决方法&#xff1a; 1.检查服务器端口是否被占用 lsof -i:端口&#xff1b; 2.nacos添加超时配置&#xff1a;

系列一、请谈谈你对JVM的理解?Java8的虚拟机有什么更新?

一、请谈谈你对JVM的理解&#xff1f;Java8的虚拟机有什么更新&#xff1f; JVM是Java虚拟机的意思。它是建立在操作系统之上的&#xff0c;由类加载器子系统、本地方法栈、Java栈、程序计数器、方法区、堆、本地方法库、本地方法接口、执行引擎组成。 &#xff08;1&#xff0…

SIMULIA-Simpack 2022x新功能介绍

通用功能 增加库伦摩擦类型 力元95 Coulomb Friction增加了3种新的摩擦方向类型用于模拟平面、圆柱和球面摩擦。 针对平移和旋转摩擦改进了滑动到粘着过渡阶段的检测&#xff0c;增加一个参数定义两种不同的滑移-粘滞过渡模式&#xff0c;即“Unloaded stick stiffness”和“…

深入流行推荐引擎3:Spotify音乐推荐系统

深入流行推荐引擎3&#xff1a;Spotify音乐推荐系统 Spotify音乐推荐系统通过矩阵分解发现每周&#xff08;Discover Weekly via Matrix Factorization&#xff09;Discover Weekly 如何运作&#xff1f;&#xff08;How Discover Weekly Works?&#xff09;矩阵分解&#xff…

语义检索系统【全】:基于milvus语义检索系统指令全流程-快速部署版

搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术细节以及项目实战(含码源) 专栏详细介绍:搜索推荐系统专栏简介:搜索推荐全流程讲解(召回粗排精排重排混排)、系统架构、常见问题、算法项目实战总结、技术…

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

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

开启数据库审计 db,extended级别或os级别)并将审计文件存放到/opt/oracle/audit/下

文章目录 1、登录到数据库2、查看审计状态3、创建审计目录4、启用审计5、设置审计文件路径6、再次查看结果 1、登录到数据库 使用SQL*Plus或者其他Oracle数据库客户端登录到数据库。 sqlplus / as sysdba;2、查看审计状态 show parameter audit;目前是DB状态&#xff0c;并且…

【算法萌新闯力扣】:旋转字符串

力扣热题&#xff1a;796.旋转字符串 开篇 今天下午刷了6道力扣算法题&#xff0c;选了一道有多种解法的题目与大家分享。 题目链接:796.旋转字符串 题目描述 代码思路 完全按照题目的要求&#xff0c;利用StringBuffer中的方法对字符串进行旋转&#xff0c;寻找相同的一项 …

第 372 场 LeetCode 周赛题解

A 使三个字符串相等 求三个串的最长公共前缀 class Solution { public:int findMinimumOperations(string s1, string s2, string s3) {int n1 s1.size(), n2 s2.size(), n3 s3.size();int i 0;for (; i < min({n1, n2, n3}); i)if (!(s1[i] s2[i] && s2[i] s…

[工业自动化-23]:西门子S7-15xxx编程 - 软件编程 - 西门子PLC人机界面交互HMI功能概述、硬件环境准备、软件环境准备

目录 一、什么是人机界面 二、什么是PLC人机交互界面HMI 三、人机界面设计的功能列表 四、开发主机与PLC的连接方式 五、开发主机与HMI的连接方式 六、HMI组态 一、什么是人机界面 人机界面是指人与机器或系统之间的交互界面。它是人类与计算机或其他设备之间进行信息交换…