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

这篇具有很好参考价值的文章主要介绍了linux 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

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

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

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

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

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

查看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

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

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

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

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

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

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

我们打开/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

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

我搞不定啊,尴尬了🤣文章来源地址https://www.toymoban.com/news/detail-457467.html

到了这里,关于linux C.UTF-8和en-US.UTF-8语言环境有什么区别?(中文乱码问题)locale命令 centos、ubuntu修改编码集(没搞定!)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)

    原文链接: 这篇文章有点长,内容有点多,如果时间急迫,可以直接翻页去末尾看结论。红色字体加粗的。 1、cpp或h文件从window上传到Ubuntu后会显示乱码, 原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK. 我们使用的Windows系统本地字符集编码为GBK。 2、Windows环境下,Qt C

    2024年02月05日
    浏览(49)
  • 什么是以太坊域名服务(ENS)?

    以太坊域名服务(ENS)是钱包地址、哈希和其他机器可读标识符的命名服务。它将难以读取的数据串转换为易于读取的地址。它的工作原理类似于用于网站的域名系统(DNS)。 最初,ENS使用Vickrey拍卖格式,向感兴趣的用户拍卖热门的6个、5个、4个和3个字母的域名。每个名称都以

    2024年01月17日
    浏览(31)
  • Go语言集成开发环境(IDE):GoLand 2023中文

    GoLand 2023是一款由JetBrains开发的现代化、功能丰富的Go语言集成开发环境(IDE) 。它提供了智能代码提示和自动完成、强大的内置调试器以及代码重构工具,帮助开发者提高编码效率并确保代码质量。GoLand 2023还支持多种版本控制系统,集成了测试工具,并提供了代码审查功能

    2024年02月06日
    浏览(52)
  • Kali Linux修改系统语言为中文

    (1)打开终端(root模式) 打开设置 (2)修改设置 en_US.UTF-8 UTF-8 改为不勾选 下面这种有个 * 属于已经勾选了[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 通过上下箭头按键我们把红点(表示当前选中的选项)移动到 en_US.UTF-8 UTF-8 ,按下空格表示

    2024年02月09日
    浏览(47)
  • Java和其他编程语言有什么区别?

    Java是一种通用、面向对象、高级编程语言,具有以下与其他编程语言的区别: 平台无关性:Java是一种平台无关的编程语言。Java源代码被编译为字节码,然后在Java虚拟机(JVM)上运行。这种设计使得Java可以在不同的操作系统上运行,只要目标系统有对应的Java虚拟机。 自动

    2024年02月06日
    浏览(52)
  • 设置 Linux-kali 语言为中文

    注意: 请在设置前给 kali 拍摄快照,以防操作不当带来影响。 使用命令: sudo su root 使用命令: apt-get update 使用命令: apt install ttf-wqy-zenhei 使用命令: dpkg-reconfigure locales 打开后,使用上下箭头找到 [*] en_US.UTF-8 UTF-8 ,其中 [*] 中的 * 代表已勾选, 点击空格取消勾选。 勾选

    2024年03月11日
    浏览(55)
  • 如何将kali linux语言设置成中文

       

    2024年02月12日
    浏览(42)
  • 借用AI工具为视频添加中文字幕,消除语言障碍,母语环境最快速地学习

    由于chatgpt的启动,感觉语言已经完全不会成为学习的障碍,突发奇想,在我们查看youtube视频的时候,有没有方便的工具能够将其字幕翻译为中文。这样能够极大提高在youtube学习的效率,于是顺手问了一下ChatGPT,这里使用了一个工具: 1. chrome 浏览器插件里面有一个DeepL翻译

    2024年02月07日
    浏览(52)
  • win10的powershell环境和cmd窗口有什么区别

    PowerShell 是 Windows 的一种脚本语言和命令行工具,用于管理和自动化系统任务。与传统的 cmd 窗口相比,PowerShell 提供了更强大和灵活的功能。以下是 PowerShell 环境和 cmd 窗口之间的一些区别: 语法:PowerShell 使用一种基于对象的命令行解释器,其语法更为强大和灵活。它可以

    2024年01月16日
    浏览(49)
  • 记一次linux系统使用dockerfile编写容器支持中文字体环境

    今天研发开发一个网上受理需要容器支持中文环境否则服务启动起来会出现中文乱码。 解决思路: 1、先把jar把在本地环境直接加参数运行如果运行起来无乱码说明本地的字体文件就可以直接COPY到容器中使用,如果还是乱码就说明本地的字体文件不支持中文环境,就需要下载

    2024年02月09日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包