如何检查区域设置是否为 UTF-8?

2023-12-09

我正在与 Yocto 合作,为 ARM 设备(i.MX 6Quad 处理器)创建嵌入式 Linux 发行版。

我已经使用变量配置了所需区域设置的列表:

IMAGE_LINGUAS = "de-de fr-fr en-gb en-gb.iso-8859-1 en-us en-us.iso-8859-1 zh-cn"

结果我获得了包含以下文件夹的文件系统:

root@lam_icu:/usr/lib/locale# cd /usr/share/locale/
root@lam_icu:/usr/share/locale# ls -la
total 0
drwxr-xr-x  6 root root  416 Nov 17  2016 .
drwxr-xr-x 30 root root 2056 Nov 17  2016 ..
drwxr-xr-x  4 root root  296 Nov 17  2016 de
drwxr-xr-x  3 root root  232 Nov 17  2016 en_GB
drwxr-xr-x  4 root root  296 Nov 17  2016 fr
drwxr-xr-x  4 root root  296 Nov 17  2016 zh_CN

and:

root@lam_icu:/usr/share/locale# cd /usr/lib/locale/
root@lam_icu:/usr/lib/locale# ls -la
total 0
drwxr-xr-x  9 root root   640 Mar 13  2017 .
drwxr-xr-x 32 root root 40000 Mar 13  2017 ..
drwxr-xr-x  3 root root  1016 Mar 13  2017 de_DE
drwxr-xr-x  3 root root  1016 Mar 13  2017 en_GB
drwxr-xr-x  3 root root  1016 Mar 13  2017 en_GB.ISO-8859-1
drwxr-xr-x  3 root root  1016 Mar 13  2017 en_US
drwxr-xr-x  3 root root  1016 Mar 13  2017 en_US.ISO-8859-1
drwxr-xr-x  3 root root  1016 Mar 13  2017 fr_FR
drwxr-xr-x  3 root root  1016 Mar 13  2017 zh_CN

所有非 ISO-8859-1 语言环境的编码是什么?我可以假设“en_GB”或“en_US”使用UTF-8编码吗?

我尝试打开“LC_IDENTIFICATION”文件,结果是:

Hc������������c美国英语区域设置免费软件 基础, 公司http://www.gnu.org/software/libc/[电子邮件受保护]_US:2000 en_US:2000 en_US:2000 en_US:2000 en_US:2000en_US:2000en_US:2000en_US:2000en_US:2000en_US:2000en_US:2000en_US:2000UTF-8

文件末尾有一些让人想起“UTF-8”的内容。这足以假设编码是 UTF-8 吗?

如何检查区域设置是否为 UTF-8?


LC_IDENTIFICATION并没有告诉你太多:

LC_IDENTIFICATION - 这不是用户可见的类别,它包含有关区域设置本身的信息,并且对用户或开发人员很少有用(但为了完整性而在此处列出)。

您必须查看完整的文件集。

似乎没有标准的命令行实用程序可以执行此操作,但有一个运行时调用(比原始语言环境函数稍晚添加)。这是一个示例程序,说明了该功能nl_langinfo:

#include <stdio.h>
#include <locale.h>
#include <langinfo.h>

int
main(int argc, char **argv)
{
    int n;
    for (n = 1; n < argc; ++n) {
        if (setlocale(LC_ALL, argv[n]) != 0) {

            char *code = nl_langinfo(CODESET);
            if (code != 0)
                printf("%s ->%s\n", argv[n], code);
            else
                printf("?%s (nl_langinfo)\n", argv[n]);
        } else {
            printf("? %s (setlocale)\n", argv[n]);
        }
    }
    return 0;
}

和一些输出,例如foo $(locale -a):

aa_DJ ->ISO-8859-1
aa_DJ.iso88591 ->ISO-8859-1
aa_DJ.utf8 ->UTF-8
aa_ER ->UTF-8
aa_ER@saaho ->UTF-8
aa_ER.utf8 ->UTF-8
aa_ER.utf8@saaho ->UTF-8
aa_ET ->UTF-8
aa_ET.utf8 ->UTF-8
af_ZA ->ISO-8859-1
af_ZA.iso88591 ->ISO-8859-1
af_ZA.utf8 ->UTF-8
am_ET ->UTF-8
am_ET.utf8 ->UTF-8
an_ES ->ISO-8859-15
an_ES.iso885915 ->ISO-8859-15
an_ES.utf8 ->UTF-8
ar_AE ->ISO-8859-6
ar_AE.iso88596 ->ISO-8859-6
ar_AE.utf8 ->UTF-8
ar_BH ->ISO-8859-6
ar_BH.iso88596 ->ISO-8859-6

您引用的目录名称通常(但不是必需)与编码名称。这是示例程序中所做的假设。有一个相关的问题如何获取终端的字符编码,但它没有有用的答案。但其中一个很有趣,因为它断言

locale charmap

将给出区域设置编码。根据标准,情况不一定如此:

  • 命令locale charmap给出使用的名称localedef -f

  • 然而,localedef中给出的名称没有特殊含义-f option.

  • localedef has a 不同的 option -u它标识代码集,但是locale(在标准中)没有提到显示此信息的方法。

像往常一样,实现可能(或可能不)以不同的方式处理未指定的功能。 GNU C 库的文档在某些方面与标准不同(请参阅locale and localedef),但没有提供显示代码集名称的明确选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查区域设置是否为 UTF-8? 的相关文章

随机推荐

  • 在 CodeIgniter 中安装omnipay 时出错

    我正在尝试在 CodeIgniter 版本 2 2 4 中添加omnipay 我按照使用此链接安装作曲家的说明进行操作 https philsturgeon uk blog 2012 05 composer with codeigniter
  • 如何限制 Google App Engine 的 Python 版本中特定方法的允许执行时间?

    由于 Google App Engine 的 python 版本不支持信号模块 如果方法在 2 秒内未返回 则调用方法并抛出 捕获异常的最简单方法是什么 如果您正在谈论 RPC 调用 例如数据存储 您可以创建一个带有截止日期的 RPC 请参
  • 在编写使用经销商 API 的应用程序时,我是否需要使用我的经销商域?

    我是 Google Apps 经销商 希望使用 Google API 例如Google Apps 转销商 API自动化我的经销商活动 当我注册成为 Google Apps 经销商时 我获得了一个新的 Google Apps 域 resell
  • 如何在编译时使用不同的接口声明而不混淆 Interface Builder

    例如 如果我的应用程序有多个版本 付费版本和免费版本 并且我希望根据哪个版本拥有不同的界面 那么 Interface Builder 似乎会感到困惑 例如 MyViewController h ifdef FREE interface My
  • Hive 连接优化

    我有两组数据都存储在 S3 存储桶中 我需要在 Hive 中处理这些数据并将输出存储回 S3 每个数据集的示例行如下 DataSet 1 requestId TADS6152JHGJH5435 customerId ASJHAGSJH se
  • 使用cat函数写入csv文件

    我需要使用 cat 函数向 CSV 添加新行 请你们帮帮我好吗 我对 R 的了解有限 这是文件 name1 csv 系统要求我将我的姓名和学生 ID 添加到前几行 homework1 lt data frame homework1 Tota
  • 将多个项目添加到列表中

    static class Program static void Main string carMake string carModel string carColour string bikeModel string bikeMake s
  • 添加边框时 CSS Div 跳转

    我不明白为什么当我将鼠标悬停在第一个框 左上角 上时 框会发生变化 我已将 box sizing 设置为 border box 因此悬停时添加的边框不会产生影响 并且它只发生在第一个框上 请帮忙 JS小提琴here box sizing b
  • AngularJS 中防止 IE 缓存的更好方法?

    我目前使用 service resource 进行 ajax 调用 在本例中为 GET 并且 IE 缓存这些调用 以便无法从服务器检索新数据 我使用了通过谷歌搜索找到的一种技术来创建一个随机数并将其附加到请求中 这样 IE 就不会去缓存数据
  • mc:edit 不适用于具有 Mandrill Javascript API 的 Mailchimp 模板

    我正在尝试使用 Mailchimp 模板通过 Mandrill API 发送电子邮件 我正在使用 Parse com 在云代码中执行此操作 请参阅此处https www parse com docs cloud modules guide
  • React Native TypeError:网络请求因 fetch() 失败

    我正在使用 React Native 来开发 Android 应用程序 通过此获取请求 我收到错误TypeError network request failed fetch https pixabay com api key MY KEY
  • R 中的自动虚拟变量

    我有以下创建的数据框 temp lt as data frame with uadm table prlo state code 我希望创建 11 个虚拟变量 前 10 名各一个 其他 一个 可以通过以下方式轻松找到前 10 名 top10
  • R过滤器包含子字符串多个条件

    嘿 我有一个 500K 行的列表 我需要按条件进行过滤 其中必须包含某些子字符串 另一个包含 20 个子字符串的列表 我在用dplyr现在打包 我的代码如下所示 result lt data gt filter grepl sub1 col
  • Java邮件与土耳其字符的问题

    我在使用 Java 代码发送的邮件中显示土耳其语字符时遇到问题 这些字符在邮件中显示为问号 Message msg new MimeMessage mailSession msg setHeader Content Encoding ISO
  • SetWindowsHookEx 全局键盘挂钩未捕获所有按键

    我正在编写属于自动化系统一部分的代码 我想添加一个键盘钩子来提前结束测试 我通过使用 SetWindowHookEx 来做到这一点 我的代码看起来很像这样 http support microsoft com kb 318804 这是我的
  • 全局变量值不可在多个函数中使用

    使用 Google Apps 脚本 我尝试创建一个可在多个函数中使用的全局变量 例如数组 但我似乎无法在任何地方找到答案 我需要它才能使我的 Google 电子表格正常工作 Code var infoSheetArray null func
  • 将 Shiro 的 PasswordMatcher 与自定义领域结合使用

    我使用 Apache Shiro 和自定义 JDBC 领域来从数据库中检索用户的盐 密码 哈希算法名称和哈希迭代次数 这些数据都存储为单独的列 问题是我不确定在使用 PasswordMatcher 验证用户密码与数据库中存储的密码是否匹配时
  • 为什么PyGame动画闪烁

    所以我运行代码 它就开始出现故障 我是 pygame 的新手 这是代码 import pygame pygame init Screen Pixels by Pixels X and Y X right and left Y up and
  • Windows下每5分钟运行一次python脚本

    我有一个简单的 python 脚本从 html 页面抓取一些数据并将结果写入 csv 文件 如何自动化抓取 即在 Windows 下每五分钟启动一次 谢谢 彼得 查看此链接 http blogs esri com esri arcgis 2
  • 如何检查区域设置是否为 UTF-8?

    我正在与 Yocto 合作 为 ARM 设备 i MX 6Quad 处理器 创建嵌入式 Linux 发行版 我已经使用变量配置了所需区域设置的列表 IMAGE LINGUAS de de fr fr en gb en gb iso 8859