linux C.UTF-8和en-US.UTF-8语言环境有什么区别?(中文乱码问题)locale命令 centos、ubuntu修改编码集(没搞定!)

news2024/9/17 8:40:53

文章目录

    • 问题背景
    • 查看C.UTF-8和en-US.UTF-8语言环境差异
    • 关于locale
    • 修改编码集
      • centos(没验证)
      • ubuntu

问题背景

我在ubuntu16.04虚拟机和英伟达盒子ubuntu18.04上分别部署了ngrest服务

用postman请求,ubuntu16.04虚拟机返回的中文是乱码,英伟达盒子ubuntu18.04不是乱码

用vi打开文件,ubuntu16.04虚拟机显示中文不是乱码,英伟达盒子ubuntu18.04是乱码

我用echo $LANG命令查看发现(或者直接用locale命令)

我的ubuntu16.04虚拟机显示为en_US.UTF-8

在这里插入图片描述

在这里插入图片描述

英伟达盒子ubuntu18.04显示为C.UTF-8

在这里插入图片描述

在这里插入图片描述

查看C.UTF-8和en-US.UTF-8语言环境差异

可能会有一些影响,因为它们在排序顺序、大小写关系、排序顺序、数千分隔符、默认货币符号等方面有所不同。
C.utf8=POSIX标准兼容的默认语言环境。只有严格的ASCII字符才是有效的,扩展后允许基本使用UTF-8
en_US.utf8=美式英语UTF-8语言环境。
虽然我不确定您可能遇到的具体效果,但我相信如果需要,您可以在应用程序中设置语言环境和编码。

一般来说,C指的是计算机,en_US指的是我们中说英语的人(以及其他想要同样行为的人)。
computer的意味着字符串有时更标准(但仍然是英语),因此程序的输出可以从其他程序读取。使用en_US,字符串可以得到改进,字母顺序可以得到改进(可能通过芝加哥风格规则的新规则等)。
所以更方便用户,但可能不太稳定。注意:语言环境不仅用于字符串的转换,还用于排序(字母顺序、数字(例如千位分隔符)、货币(我认为可以安全地预测美元和小数点后两位)、月份、星期几等。
在您的例子中,它只是两个地区的UTF-8版本。
一般来说,这不重要。我通常更喜欢enúUS.UTF-8,但通常不重要,在您的情况下(服务器应用程序),它应该只更改日志和错误消息(如果您使用locale.setlocale())。
您应该在应用程序中处理客户端区域设置。从其他程序读取的程序应该在打开管道之前设置C,所以这并不重要。
如你所见,也许这无关紧要。您还可以使用POSIX语言环境,也可以在Debian中定义。您可以使用locale -a获得已安装区域设置的列表。
注意:微优化将规定C/C.UTF-8语言环境:不翻译文件(gettext),以及关于排序和数字格式的简单规则,但这应仅在服务器端可见。

关于locale

参考文章:Linux深入探索16-区域设置:locale

修改编码集

centos(没验证)

  1. 安装编码集
    localedef -v -c -i en_US -f UTF-8 C.UTF-8
  2. vim /etc/sysconfig/i18n
    写入如下内容
    LANG=“C.UTF-8”
    LC_ALL=“C.UTF-8”
  3. vim /etc/profile
    export LANG=“C.UTF-8”
    export LC_ALL=“C.UTF-8”
  4. source /etc/profile
  5. locale

参考文章:Centos修改编码集为C.UTF-8

ubuntu

在我们英伟达盒子ubuntu18.04上执行/etc/default/locale查看内容为:

root@ubuntu:/etc/default# vi locale 

LANG="en_US.UTF-8"

在我们ubuntu16.04虚拟机上执行/etc/default/locale内容为:

root@xy-virtual-machine:/etc/default# vi locale 

#  File generated by update-locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_IDENTIFICATION="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"

因为我们英伟达盒子是符合要求的,所以我猜想是否将虚拟机的/etc/default/locale文件内容改成跟盒子一样就行了?

想归这么想,但是上面有一句File generated by update-locale,我查看update-locale,貌似有特定方法能设置,,,

直接执行update-locale LANG=C.UTF-8

在这里插入图片描述

提示*** update-locale: Warning: LANGUAGE ("en_US:en") is not compatible with LANG (C.UTF-8). Disabling it.,网上说不用管它,参考文章:OSSIM开源系统汉化解决方案

然后我们断开xshell,再连接,输入locale,发现修改成功了

在这里插入图片描述

但是postman请求返回还是乱码,我们重启虚拟机试试,重启后连接发现,并未生效

在这里插入图片描述
莫非还真要修改真实文件?

我们打开/etc/default/locale,将内容修改成

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=

重启虚拟机,虽然修改成功了,但还是乱码

貌似这样直接修改文件是自欺欺人行为,它真实的编码不是在这统揽全局的

我们这样:

update-locale LANG=C.UTF-8
update-locale LANGUAGE=
update-locale LC_CTYPE="C.UTF-8"
update-locale LC_NUMERIC="C.UTF-8"
update-locale LC_TIME="C.UTF-8"
update-locale LC_COLLATE="C.UTF-8"
update-locale LC_MONETARY="C.UTF-8"
update-locale LC_MESSAGES="C.UTF-8"
update-locale LC_PAPER="C.UTF-8"
update-locale LC_NAME="C.UTF-8"
update-locale LC_ADDRESS="C.UTF-8"
update-locale LC_TELEPHONE="C.UTF-8"
update-locale LC_MEASUREMENT="C.UTF-8"
update-locale LC_IDENTIFICATION="C.UTF-8"
update-locale LC_ALL=
update-locale LANG=C.UTF-8 && \
update-locale LANGUAGE= && \
update-locale LC_CTYPE="C.UTF-8" && \
update-locale LC_NUMERIC="C.UTF-8" && \
update-locale LC_TIME="C.UTF-8" && \
update-locale LC_COLLATE="C.UTF-8" && \
update-locale LC_MONETARY="C.UTF-8" && \
update-locale LC_MESSAGES="C.UTF-8" && \
update-locale LC_PAPER="C.UTF-8" && \
update-locale LC_NAME="C.UTF-8" && \
update-locale LC_ADDRESS="C.UTF-8" && \
update-locale LC_TELEPHONE="C.UTF-8" && \
update-locale LC_MEASUREMENT="C.UTF-8" && \
update-locale LC_IDENTIFICATION="C.UTF-8" && \
update-locale LC_ALL=

update-locale LC_ALL=“C.UTF-8” 没用。。。

重启虚拟机,还是不行

把配置文件改成

LANG="en_US.UTF-8"

重启还是不行,,我了个去。。。。。累死我了

最后一种方法,直接加启动配置文件!

/etc/profile文件后面增加

#arnold add 20221117 start
chmod 777 /usr/sbin/update-locale
update-locale LANG=C.UTF-8
update-locale LC_CTYPE="C.UTF-8"
update-locale LC_NUMERIC="C.UTF-8"
update-locale LC_TIME="C.UTF-8"
update-locale LC_COLLATE="C.UTF-8"
update-locale LC_MONETARY="C.UTF-8"
update-locale LC_MESSAGES="C.UTF-8"
update-locale LC_PAPER="C.UTF-8"
update-locale LC_NAME="C.UTF-8"
update-locale LC_ADDRESS="C.UTF-8"
update-locale LC_TELEPHONE="C.UTF-8"
update-locale LC_MEASUREMENT="C.UTF-8"
update-locale LC_IDENTIFICATION="C.UTF-8"
#arnold add 20221117 end

重启虽然设置成功了,还是没用。。。请求返回依然乱码

我搞不定啊,尴尬了🤣

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

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

相关文章

软件测试职场焦虑之我对35岁危机的看法

目录 前言 如何理解35岁失业? 本质的原因是什么? 应对35岁失业的策略 总结 前言 这几年关于“35岁失业”的讨论甚嚣尘上,特别是进入疫情时代,身边也越来越多的人开始讨论这个话题。 一方面是疫情带来的巨大变革,…

SpringCloud——微服务介绍+系统架构

目录 1. 微服务介绍 2.系统架构演变 3. 单体应用架构 3.1优点: * 项目架构简单,小型项目的话, 开发成本低* 项目部署在一个节点上, 维护方便 3.2缺点: * 全部功能集成在一个工程中,对于大型项目来讲…

Data Catalog3.0:Modern Metadata for the Modern Data Stack

从2020年开始,在数据领域中,有一个比较流行的术语:The Modern Data Stack(现代数据堆栈),简单理解就是汇集了处理海量数据的最佳工具集。这包括在最好的工具上建立数据基础设施,如用于数据仓库的Snowflake,…

传奇外网架设常见的问题及解决办法-传奇创建人物失败/不开门/PAK显示密码错误/脚本错误

传奇外网架设常见的问题及解决办法-传奇创建人物失败/不开门/PAK显示密码错误/脚本错误 在架设传奇的时候是否有遇到无法创建人物、pak密码错误等一系列情况呢?咱们都知道是架设不对的问题,但是具体是哪部分的问题,很多同学都不清楚&#xff…

JDK与cglib动态代理

JDK动态代理 接口类 public interface Subject {void doSomething(); }接口实现 public class RealSubject implements Subject {Overridepublic void doSomething() {System.out.println("RealSubject do something");} }InvocationHandler类 package daili;imp…

随笔记:计算机基础及进制计数法

随笔记:计算机基础及进制计数法 记录一下最近接触的基本的概念,便于想看的时候随时来翻看一下。 基础理论还是比较重要滴,基础理论还是比较重要滴,基础理论还是比较重要滴 现代计算机是用 0 和 1 来表示信息的,使用的…

6、行为型模式-责任链模式

一、责任链模式描述 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者…

Unity AVPro 使用

AVPro 感觉我写的没多大用处,后面看看文档再完善一些。目前的东西是可以满足一些简单的需求的。 说明 标题名称内容Unity版本Unity 2021 .1.18f1c1AVPro 版本AVPro Video - Ultra Edition 2.5.6IDEVS2022系统版本Win 10 1909撰写日期2022 11月15日晚 需要注意的地…

防孤岛保护装置在光伏行业的应用

安科瑞 华楠 应用场景 防孤岛原理:防孤岛保护装置检测到并网点有逆功率、频率突变、 等异常数据时,即发生孤岛现象时,装置可配合断路器快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全 …

Go:Signal信号量的简介与实践(优雅的退出)

文章目录简介一、kill与kill9的区别二、实践:优雅的退出小结简介 go中的信号量 有些信号名对应着3个信号值,这是因为这些信号值与平台相关,SIGKILL和SIGSTOP这两个信号既不能被应用程序捕获,也不能被操作系统阻塞或忽略。 一、…

智慧管廊解决方案-最新全套文件

智慧管廊解决方案-最新全套文件一、建设背景二、建设意义三、建设目标四、思路架构综合管廊目前存在的痛点1、安全防范不足2、管理技术落后3、信息孤岛问题4、多头管理问题五、建设方案六、获取 - 智慧管廊全套最新解决方案合集一、建设背景 综合管廊一般是建于城市地下用于容…

NUMA架构详解

基本概念 为什么要有多处理器架构? 由于摩尔定律的失效,单个CPU内的晶体管的数量接近于饱和状态,因此单个CPU的性能已经接近饱和状态,这时,要想提高计算机的性能,就必须朝着多核架构发展。多核架构中&…

力扣(leetcode)刷题分享,简单题(第2期)

力扣第二期介绍1. 反转链表2. 移除链表元素3. 找链表的中间节点4. 寻找链表中的倒数第k个结点5. 合并两个有序链表总结第二期介绍 本期博客主要讲解的题目是有关链表的一些经典OJ题,有一定难度,希望大家耐心看完。 1. 反转链表 题目介绍: …

VUE Date类型前端判断动态校验

需求 原本需求 一个编号和一个日期在流程中的审查人节点必填&#xff0c;于是我就直接写了前端必填校验 所有代码和名称已做更改&#xff0c;不涉及到公司隐私 <CustomFormItem label"登记编号" prop"registerNo" v-if"asset_examiner form.node …

cleanmymac2023免费版纯净mac电脑系统管家

如今&#xff0c;我们在生活的方方面面都使用支持互联网的设备——查找信息、购物、银行、做作业、玩游戏&#xff0c;以及与朋友和家人保持联系。因此&#xff0c;我们的设备包含许多关于我们的个人信息。 此外&#xff0c;随着时间的推移&#xff0c;任何伟大的设备都会变得…

VIAVI唯亚威FFL-050/-100 可视故障定位仪

不管是进行安装还是故障排查&#xff0c;可视故障定位仪 (VFL) 都是快速、 方便定位光纤问题区域的必要工具。通过显示光纤损坏的准确位置&#xff0c; 技术人员能诊断、定位并有效地修复故障点。VFL 也可用于执行连接 性测试和光纤识别。 用于检查光纤弯曲和断裂、损伤位置和…

iNFTnews|Facebook、Twitter先后扑街,社交媒体的未来属于Web3?

最近埃隆马斯克&#xff08;Elon Musk&#xff09;收购推特的举动引发了热议。一方面&#xff0c;一些用户认为这位特立独行、做事说一不二的亿万富翁可以真正充分发挥平台的巨大潜力。但另外一部分人却因此担忧互联网未来的发展。 想想看&#xff0c;推特是世界上用户最多的社…

javaweb之会话技术

Cookie Cookie的基本使用 对于Cookie的使用&#xff0c;我们更关注的应该是后台代码如何操作Cookie&#xff0c;对于Cookie的操作主要分两大类&#xff0c;本别是发送Cookie和获取Cookie,对于上面这两块内容。 1、发送Cookie 创建Cookie对象&#xff0c;并设置数据 Cookie c…

6-1 邻接矩阵存储图的深度优先遍历

6-1 邻接矩阵存储图的深度优先遍历 分数 20 作者 DS课程组 单位 浙江大学 试实现邻接矩阵存储图的深度优先遍历。 函数接口定义&#xff1a; void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );其中MGraph是邻接矩阵存储的图&#xff0c;定义如下&#xff1a; t…

35岁互联网人只会被清退,是我听过最大的谎言

作为一个在测试行业摸爬滚打11年的老鸟&#xff0c;距离35岁还有两个月&#xff0c;目前在一家互联网公司担任 测试总监 的岗位。回看这些年的进阶之路&#xff0c;能做到今天的职位&#xff0c;关键的就是那几步。 而我认识的目前已失业和依然在做基层测试的同行&#xff0c;…