用于将 格式的 unicode 字符转换为其 ASCII 等效项的脚本

2024-04-21

我正在对 Linux 区域设置文件进行一些更改/usr/share/i18n/locales(如 pt_BR),更改日期、时间、数字等的默认格式。但是由于 unicode 字符在<U9999>格式,文本很难阅读。

这是其中的一个片段:

LC_TIME
abday   "<U0044><U006F><U006D>";"<U0053><U0065><U0067>";/
    "<U0054><U0065><U0072>";"<U0051><U0075><U0061>";/
    "<U0051><U0075><U0069>";"<U0053><U0065><U0078>";/
    "<U0053><U00E1><U0062>"

那么,如何制作一个简单的脚本(可能是 bash、python、pearl 等等)来转换此文本,替换<Uxxxx>代码到它们的 ASCII 等价物? (是的,它们都是低于 255 的 ASCI 字符,大多数甚至低于 127)

如果收到多个答案,我将接受最优雅和/或更详细的解释(例如命令中使用的选项和标志)

例如,上面的文本将转换为:

LC_TIME
abday   "Dom";"Seg";/
    "Ter";"Qua";/
    "Qui";"Sex";/
    "Sáb"

另一个可以执行相反操作的脚本的奖励点:将给定字符串的所有字符转换为<Uxxx> format.

Thanks!


使用字段

#!/bin/bash

awk -F'<U0+|>' '{
    for(i=1;i<=NF;i++)
        if($i ~ "^[0-9A-F]+$")
            $i=sprintf("%c", strtonum("0x"$i))
}1' OFS="" /path/to/infile

解释

  1. -F'<U0+|>':这就是这个脚本如此短的魔力。我们告诉 awk 字段分隔符是<U0+或者一个简单的>。这样做的好处是 awk 会自动为我们删除这些字符,因此我们不必手动执行此操作gsub()当需要进行 strtonum() 转换时。

  2. for(i=1;i<=NF;i++):迭代每个字段

  3. if($i ~ "^[0-9A-F]+$"):检查当前字段是否仅由十六进制数字组成。请记住,由于上面的#1,类似<U006F>将被视为6F在此刻
  4. $i=sprintf("%c", strtonum("0x"$i)):将十六进制数字替换为其对应的ascii值。我们必须为字段添加前缀$i with "0x"所以 awk 知道它是一个十六进制值
  5. }1: 强制的快捷方式print or 总是打印每一行
  6. OFS="":将输出字段分隔符设置为空字符串。如果我们不这样做,我们将在输出中出现空格的地方<U0+ or >

使用 match() [需要 gawk]

#!/bin/bash

gawk '{
    while(match($0, /<U[0-9A-F]+>/)){
        pat = substr($0,RSTART,RLENGTH)
        gsub(/U0+|[<>]/,"",pat)
        asc = sprintf("%c", strtonum("0x"pat))
        $0 = substr($0, 1, RSTART-1) asc substr($0, RSTART+RLENGTH)
    }
}1' /path/to/infile
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于将 格式的 unicode 字符转换为其 ASCII 等效项的脚本 的相关文章

随机推荐

  • 检查 Ruby 中是否存在 URL

    我如何使用 Ruby 检查 URL 是否存在 例如 对于 URL https google com 结果应该是truthy 但是对于 URL https no such domain or https stackoverflow com n
  • C中的副作用是什么?

    维基百科说 在计算机科学中 一个操作 函数或表达式被认为具有副作用如果它在其本地环境之外修改某些状态变量值 也就是说 除了向操作的调用者返回一个值 主要效果 之外 还具有可观察到的效果 但是我们如何访问本地环境之外的变量 任何人都可以解释这
  • 使用 H2 数据库在 JDBC 中将年份从负 -509 更改为正 510

    509 vs 510 我在使用 JDBC 时看到某种已更改或错误的数据 所以我观察使用H2数据库 http h2database com Java 8 更新 151 上的版本 1 4 196 这是一个完整的例子 请注意我们如何检索日期值三次
  • 如果不刷新页面,Vuex 状态不会更新

    我正在构建一个单页面应用程序 用户可以根据他们是否登录来看到不同的页面 登录调用工作正常 授权令牌保存在本地存储中 设置 我已经设置了一个名为的吸气剂loggedIn返回true如果在状态上设置了令牌 这是我的确切代码auth js商店模块
  • 将十六进制字符串转换为无符号整数 (VBA)

    在 MS ACCESS VBA 中 我通过在字符串前加上 前缀将十六进制字符串转换为十进制 CLng h1234 4660 CLng h80000000 2147483648 我应该怎么做才能将其转换为无符号整数 使用 CDbl 也不起作用
  • 在均匀网格上查找到点云中最近点的距离

    我有一个大小为 AxBxC 的 3D 网格 网格中的点之间的距离 d 相等 给定多个点 考虑到以下假设 找到每个网格点到最近点的距离 每个网格点应包含到点云中最近点的距离 的最佳方法是什么 假设 A B 和 C 相对于 d 来说相当大 给出
  • Python正则表达式查找大括号的所有大小写,包括括号

    我想查找并替换双大括号内的字符串 包括括号本身 例如 a href hello a 理想情况下应该返回 hello 我发现了这个表达 here https stackoverflow com questions 10643553 pytho
  • Android上如何使用UID获取用户名?

    我有几个这样的UID 10022 10011 1000 其实我知道他们的用户名是u0 a22 u0 a11 system 但问题是 如何使用UID获取用户名呢 没有 etc passwd根本没有文件 我编写了一个实用程序类 通过硬编码值来获
  • 仅出现在存档的 Mac OS X 产品中的错误

    我和我的朋友正在为 Mac 应用商店开发一个应用程序 我们将其提交给应用程序商店 但苹果以我们以前从未遇到过的错误为由拒绝了它 我们很难重现该错误 但经过一段时间的调试后 我们发现该错误仅出现在存档产品中 该错误的症状是 我们应用程序中的某
  • 将数据从 csv 复制到 D3 中的数组中

    我知道这个问题以前曾被问过 但由于某种原因 他们的解决方案对我不起作用 我正在尝试使用 CSV 文件中的数据填充两个数组 其中 name value alpha 34 beta 12 delta 49 gamma 89 我现在正在尝试的是
  • 如何单击表格单元格并显示带有注释的模式

    我对编程相当感兴趣 并且已经在一个问题上被阻止了几天 我有一个包含 2 列的表 记录 和每条记录的注释 注释 通常很长 因此我计划在 注释 列上的每个单元格上建立一个链接 并链接到显示注释的模式 我面临的问题是所有链接都会显示表格第一项的注
  • 使用超出范围的变量

    我正在制作一个响应式背景视频 我有这个代码
  • Silverlight、RIA 服务、MVC2P2 = 无数据

    我在升级当前项目以使用 RIA 服务时遇到问题 我添加了所有必要的 web config 更改 但仍然没有运气 我一切都编译得很好 但是当我使用数据上下文点击页面时 我收到错误 我用 fiddler 进行了调试 并且在其中一个请求上收到了
  • 如何在 Aqua Data Studio 中导出注册的服务器设置?

    有谁知道如何在 Aqua Data Studio 中导出注册服务器 也许有一些棘手的方法可以通过复制一些 ini 文件或注册表项来完成此操作 AD Studio 服务器注册位于 USER HOME datastudio connection
  • MySQL - 行计数和左连接问题

    我有 2 个表 活动和活动代码 营销活动 id partner id 状态 Campaign codes ID 代码 状态 我想要获取所有营销活动的所有营销活动代码的计数 其中营销活动代码 status 等于 0 或营销活动没有营销活动代码
  • 使用 jQuery 获取语法错误 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions Add a
  • Android 相当于 iPhone 的“添加到主屏幕”吗?

    我正在开发一个移动网络应用程序 目前我有一段 jQuery 代码 用于检查应用程序是否全屏运行 if window navigator standalone content before div class notice To enjoy
  • XSD 架构和 JAXB 类中的多态性

    我有一个像这样的xml
  • 如何防止 SVN 缓存单个存储库的凭据?

    我正在使用 Collabnet SVN 客户端版本 1 5 和 1 6 我的本地计算机运行的是 Windows Vista x64 我知道 确实非常悲伤 我想每次尝试在选定的存储库上执行任何颠覆操作时都强制进行身份验证 我如何将属性或设置设
  • 用于将 格式的 unicode 字符转换为其 ASCII 等效项的脚本

    我正在对 Linux 区域设置文件进行一些更改 usr share i18n locales 如 pt BR 更改日期 时间 数字等的默认格式 但是由于 unicode 字符在