前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >这个乱码问题,生涯罕见!

这个乱码问题,生涯罕见!

作者头像
kunge
发布于 2024-02-29 08:29:05
发布于 2024-02-29 08:29:05
2120
举报
文章被收录于专栏:码海码海

前两天我们的 AI 网站用户反馈了一个乱码问题

正常的情况应该如下

乍一看还是很奇怪的,因为上线之后大多数人是没有问题的,结果突然间出了这么一例。乱码问题,无非就是编解码不一致导致的,那为什么大多数机型的编解码一致,而少部分却不一致呢,接下来就是排查阶段。

我首先看了下我们项目中的编码设置

乍一看没啥问题,指定的编码确实是UTF-8,理论上只要在这里指定 UTF-8 编码,浏览器就能据此正常解码,但为什么这个用户还是有乱码问题呢

眼尖的朋友朋友估计一眼就发现了问题,上面的这些配置是配在 root.tsx, 它是一个 tsx 文件,最终是会被编译成 js 的,也就是说上面的配置是在一个 js 文件中动态生成的!

由于 meta 这些标签是 js 动态生成的,那么浏览器下载拿到 js 文件时其实是不知道它用的是什么编码的,等你生成了 meta 标签,它已经解码完成了,我们可以通过查看一下网页的源码验证一下我们的猜想:

可以看到源文件中确实没有 meta utf-8,与我们的猜想相符。

问题找到了但怎么解决呢。主要有两种方法

  1. 写一个模板,让 vite 编译时根据这个模板编译生成带有 <head><meta charset="UTF-8"></head> 这个选项的源文件,如下

当然了你也可以编译后写个脚本将编译生成的 index.html 文件加上如上标签

  1. 还有一种更简单的方式

之前是因为编译出的 index.html 缺少 meta 这个标签,导致浏览器无法知道文件用的是什么编码,那除了这个还有其他办法让浏览器知道用的是什么编码吗,有的,在返回的文件中指定 Content-Type 的 charset 为 utf-8 即可,如下

我们的工程是 node 工程,请求会先打到 nginx, 再转发到 node,最终也是通过 nginx 返回的,所以我们在 nginx 的配置文件中设置如下:

这样就会在 Content-Type 中返回 charset=utf-8,解码也就正常了

文中其实留了一个问题,为什么最开始既没指定 meta 标签也没在返回的 header 中指定 Content-Type 但大多数机型却依然展示正常呢

  1. 智能字符编码检测:现代浏览器和操作系统通常具有更强大和精准的字符编码检测机制。即使没有明确指定字符集,它们也能更准确地猜测和识别文本的编码,尤其是对于常见的编码格式如 UTF-8。
  2. 默认编码假设:许多现代浏览器和操作系统可能默认假设文本是 UTF-8 编码的,特别是当无法从内容中明确识别编码时。由于 UTF-8 是目前最广泛使用的字符编码,这种假设在大多数情况下是有效的。
  3. 自动字符集转换:一些现代浏览器可能在后台自动进行字符集转换,当它们检测到可能的编码问题时,会尝试使用不同的编码来解析文本,以找到最佳显示方式。
  4. 操作系统和浏览器更新:随着操作系统和浏览器的更新,对于国际化和多语言支持的改进也在不断进行。这包括对不同字符编码的更好支持,使得即使在缺乏明确编码声明的情况下,也能正确显示文本。
  5. 优化的默认设置:在新版本的操作系统和浏览器中,开发者可能已经优化了默认设置,以更好地处理全球化的网络内容,其中包括对 UTF-8 编码的优化支持。

然而,即使在最新的系统和浏览器中通常能够正确处理未明确指定字符集的情况,最佳实践仍然是在服务器端显式声明字符集或在 meta 标签中指定 UTF-8 编码。这样可以提供更可靠的用户体验,确保在各种环境和设备上的内容都能被正确地显示,减少因字符编码问题导致的潜在乱码问题。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码海 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常见乱码问题分析
在字符集这一篇文章中,我们基本了解了字符集的一些概念,也知道了什么是编码,什么是编码什么是解码。那么接下来我们就聊聊乱码。
@阿诚
2020/09/01
1.5K0
常见乱码问题分析
Java Web中的中文编码问题分析
在计算机中存储信息的最小单位是1个字节,即8bit,所以能标识的最大字符范围是0~255,而人类自然语言中例如汉语、日语要表示的符号太多,无法单纯用一个字节来完全表示,为了解决这个矛盾必须要有一个新的人类可识别的数据存储结构字符,而从char到byte必须编码。
用户9184480
2024/12/19
1160
Java Web中的中文编码问题分析
javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
然后使用      65------>$ 另外一种解码方式解读,显然A就变成了$,这不就是乱码了么
noteless
2018/09/11
3.8K0
javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码
php中常见编码问题
PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等。作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用。字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念。但是由于各个本地字符集代码范围重叠,相互间信息交换困难;软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,作一致处理,将特别的本地化处理内容降低到最少。这也就是所谓的国际化(118N)。各种语言信息被进一步规范为 Locale 信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。
后端技术探索
2018/08/09
1.2K0
Apache环境下页面乱码的几种可能总结
采用典型的LAMP架构开发的时候,环境中多处涉及到编码的指定,有一个地方忽略,都有可能造成页面汉字乱码的产生,本文将总结这些乱码产生的可能的原因,方便我们排查。
大江小浪
2018/07/25
1.2K0
一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析
这就是为什么我们在浏览器的地址栏中能看到中文,但是把地址拷贝出来后中文就变成了一些奇怪的串了。
谭庆波
2018/08/10
4.8K0
一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析
遇到乱码问题,如何解决?
之前解决了一个 Python 的 UnicodeEncodeError 问题,比较具有代表性,特此分享一下,希望可以帮到遇到此类问题的朋友。
somenzz
2021/10/08
1.3K0
Java中文乱码问题解析与解决方案
在Java控制台输出中文时,如果控制台默认编码与Java程序的编码不一致,就可能出现乱码。这种情况通常发生在Windows系统的cmd命令行窗口中,因为cmd的默认编码可能是GBK,而Java程序可能使用的是UTF-8编码。
程序员波特
2024/03/16
1.5K0
【Java 进阶篇】解决Java Web应用中请求参数中文乱码问题
在Java Web应用开发中,处理请求参数时经常会遇到中文乱码的问题。当浏览器向服务器发送包含中文字符的请求参数时,如果不正确处理,可能会导致乱码问题,使得参数无法正确解析和显示。本文将详细探讨Java Web应用中请求参数中文乱码问题,以及如何解决这个问题。
繁依Fanyi
2023/10/30
1.2K0
乱码,乱码
早期计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。
奋飛
2019/08/15
4.1K0
WEB:字符集、编码、乱码 —— 看这篇就够了
ASCII(美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,是现今最通用的单字节编码系统。
WEBJ2EE
2019/07/19
4.2K0
WEB:字符集、编码、乱码 —— 看这篇就够了
JSP中文乱码的产生原因及解决方案
JSP中文乱码的产生原因及解决方案在JSP的开发过程中,经常出现中文乱码的问题,可能一直困扰着大家,现在把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先需要了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文
java达人
2018/01/31
3.5K0
java 汉字乱码_Java中文乱码问题
Java Source File 中Default encoding 改写成UTF-8(你所需的编码类型) 然后Update,OK确定就可以了。
全栈程序员站长
2022/09/14
7.7K0
java 汉字乱码_Java中文乱码问题
Web开发中的中文乱码问题
本文主要是围绕Web开发中涉及到的中文编码这一常见问题展开,包括了对字符编码基础理论的简述以及常见几种编码标准的介绍。其中包括:ASCII、ISO8859-1、Unicode、GBK。下面先对这些字符编码集进行简单的介绍。
topgunviper
2022/05/12
1.9K0
深入分析 Java 中的中文编码问题
不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解。我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。这个翻译的过程就是编码。所以可以想象只要不是说英语的国家要能够使用计算机就必须要经过编码。这看起来有些霸道,但是这就是现状,这也和我们国家现在在大力推广汉语一样,希望其它国家都会说汉语,以后其它的语言都翻译成汉语,我们可以把计算机中存储信息的最小单位改成汉字,这样我们就不存在编码问题了。
九州暮云
2019/08/21
1.5K0
Java Web乱码分析及解决方式(一)——GET请求乱码
在进行Web開始时。乱码是我们最常常遇到也是最主要的问题。有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住。
全栈程序员站长
2022/07/11
1.2K0
Java Web乱码分析及解决方式(一)——GET请求乱码
那些坑人的乱码问题(下)
关于编码问题前面一共整理4篇博客,这是终篇。我使用MySQL时经常会遇到乱码问题,尤其是涉及到中文和emoji表情符号时,然而当我查询资料时发现大多数资料几乎雷同,寥寥几句仅贴了几个参数的定义,并没有案例来详细说明,因此我利用几个周末时间整理出这个编码系列博客,希望能对和我同样深受编码困扰的人提供些帮助,当然能力有限,里面很多观点是我根据各种资料的推测,并没有在相关文档中找到确切的描述佐证,可能有理解偏颇之处。
一个无聊的人
2022/08/26
2.1K1
那些坑人的乱码问题(下)
java开发中各种中文乱码问题解决策略「建议收藏」
*注意:字节流和字符流向页面输出数据,不能同时使用(互斥的)。 使用字符流不能直接向页面输出数字(因为默认走ASCII,比如response.getOutputStream().write(97); 的输出结果是字符 a)
全栈程序员站长
2022/09/08
1.3K0
乱码问题
h3110_w0r1d
2024/02/19
1580
老是遇到乱码问题:它是如何产生的,又如何解决呢?
中文乱码问题在我们日常开发中司空见惯,那么乱码问题是如何产生的呢?又怎样去解决乱码问题呢?本文将结合基本概念和例子展开阐述,希望大家有收获。
捡田螺的小男孩
2020/04/15
1.1K0
老是遇到乱码问题:它是如何产生的,又如何解决呢?
推荐阅读
相关推荐
常见乱码问题分析
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文