首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Perl将数字十六进制格式的UCS2(未知LE或BE)转换为UTF-8

使用Perl将数字十六进制格式的UCS2(未知LE或BE)转换为UTF-8,可以使用以下步骤:

  1. 安装Perl模块Encode
代码语言:bash
复制
cpan install Encode
  1. 编写Perl脚本hex_to_utf8.pl
代码语言:perl
复制
#!/usr/bin/perl
use strict;
use warnings;
use Encode;

# 读取命令行参数
my $hex_str = $ARGV[0];

# 将十六进制字符串转换为字节数组
my @bytes = map { hex($_) } $hex_str =~ /(..)/g;

# 判断字节序
my $is_le = ($bytes[0] == 0xFFFE) ? 1 : 0;

# 将UCS2字节数组转换为字符串
my $ucs2_str = '';
for (my $i = $is_le ? 1 : 0; $i < $#bytes; $i += 2) {
    my $ch = ($bytes[$i] << 8) | $bytes[$i+1];
    $ucs2_str .= chr($ch);
}

# 将UCS2字符串转换为UTF-8字符串
my $utf8_str = encode('UTF-8', $ucs2_str);

# 输出UTF-8字符串
print $utf8_str;
  1. 使用Perl脚本将十六进制字符串转换为UTF-8字符串:
代码语言:bash
复制
perl hex_to_utf8.pl "0054 0068 0069 0073 0020 03A9 006B 0067"

输出结果:

代码语言:txt
复制
This Ωkg

这个脚本将十六进制字符串转换为UCS2字节数组,然后根据字节序判断将其转换为字符串,最后使用Encode模块将UCS2字符串转换为UTF-8字符串。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Node.js Buffer(缓冲区)

Buffer 与字符编码 Buffer 实例一般用于表示编码字符序列,比如 UTF-8UCS2 、 Base64 、十六进制编码数据。...如果设置去掉高位的话,这种编码是非常快。 utf8 - 多字节编码 Unicode 字符。许多网页和其他文档格式使用 UTF-8 。...utf16le - 2 4 个字节,小字节序编码 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。 ucs2 - utf16le 别名。...latin1 - 一种把 Buffer 编码成一字节编码字符串方式。 binary - latin1 别名。 hex - 每个字节编码为两个十六进制字符。...'utf8' 编码, 并输出: abcde Buffer 转换为 JSON 对象 语法 Node Buffer 转换为 JSON 对象函数语法格式如下: buf.toJSON() 当字符串化一个

1K10
  • Node.js Buffer(缓冲区)(上)

    但在处理像TCP流文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据缓存区。...---- Buffer 与字符编码 Buffer 实例一般用于表示编码字符序列,比如 UTF-8UCS2 、 Base64 、十六进制编码数据。...如果设置去掉高位的话,这种编码是非常快。 utf8 - 多字节编码 Unicode 字符。许多网页和其他文档格式使用 UTF-8 。...utf16le - 2 4 个字节,小字节序编码 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。 ucs2 - utf16le 别名。...latin1 - 一种把 Buffer 编码成一字节编码字符串方式。 binary - latin1 别名。 hex - 每个字节编码为两个十六进制字符。

    1.1K20

    开心档之Node.js Buffer(缓冲区)

    Buffer 与字符编码 Buffer 实例一般用于表示编码字符序列,比如 UTF-8UCS2 、 Base64 、十六进制编码数据。...如果设置去掉高位的话,这种编码是非常快。 utf8 - 多字节编码 Unicode 字符。许多网页和其他文档格式使用 UTF-8 。...utf16le - 2 4 个字节,小字节序编码 Unicode 字符。支持代理对(U+10000 至 U+10FFFF)。 ucs2 - utf16le 别名。...abcde abcde abcde ---- Buffer 转换为 JSON 对象 语法 Node Buffer 转换为 JSON 对象函数语法格式如下: buf.toJSON() 当字符串化一个...16 buf[index] 获取设置指定字节。返回值代表一个字节,所以返回值合法范围是十六进制0x00到0xFF 或者十进制0至 255。

    1.1K10

    彻底解决了一直困扰编码问题

    在批量处理文件(后缀包括 ".csv"、".xlsx"、".xls"文件)时,可能会出现同一个文件夹内同时存在不同编码文件;亦或非"utf-8"格式其他格式,即便相同格式也会出现有些文件能打开,而有些文件不能打开...接下来介绍几种不同解决方式,主要思想是原始(编码)文件转换成目标(编码)文件utf-8,再用工具读取。 ?...对于这两种格式,python都是支持,这个是在编译时通过--enable- unicode=ucs2--enable-unicode=ucs4来指定。...# 把内部编码unicode转换为utf-8编码字符串 name =look.encode(b[0]) # 用codecs提供open方法来指定打开文件语言编码, # 它会在读取时候自动转换为内部...使用记事本转换格式 记事本是个强大文本编辑软件,在少量文件未知原始文件编码情况下,使用记事本转换编码很是方便。

    1.2K40

    UTF-8与UTF-16

    提到UTF-8,总能想起来Window里面的从前记事本,使用UTF-8编码时会向文件开头加一个[BOM]标记,使用十六进制表示就是 EF BB BF 。...UTF-8实现: 比如大写数字“一”,它Unicode代码点是 U+4E00 ,它UTF-8编码十六进制表示是 E4 B8 80 ,占用了三个字节,阿拉伯数字 1 编码十六进制形式是...,大于0x0800,小于0xFFFF,转换为UTF-8时占用3字节,需使用第三个模板,按顺序填入: 1110 0100 1011 1000 1000 0000 对应转换成十六进制表示 E4 B8...UTF-16: 存在一个起始字节序标记 FF FE FE FF ,分别代表小端序和大端序,对于“一”UTF-16(LE编码则是004E,数字1编码为3100,这个内存顺序是小端序...UTF-16实现: 编码: 双字节:Unicode代码数字小于U+10000,直接转换为UTF-16。

    1.9K30

    Linux命令(34)——vim命令

    这个是常用vi启动格式; -:表示待编辑文件从标准输入读取; -t [tag]:使vi打开编辑文件后,光标定位到指定tag; -q [errorfile]:使用quickFix模式启动...删除即剪切; y:复制选中文本; yy:复制光标所在的当前行; nyy:复制当前行以及其后n-1行,n为一个数字; p:小写p,粘贴文本操作,用于缓存区内容粘贴到当前光标所在位置下方; P:大写...vim在linux下默认是以utf-8来编码文件和解析文件,当使用vim来打开ucs2编码文件时,会出现乱码,此时使用set fileencoding显示utf-8编码,而不是ucs2编码,读者可自行验证...命令格式: iconv -f encoding -t encoding inputfile 比如一个GBK编码文件转换成UTF-8编码: iconv -f GBK -t UTF-8 file1 -o...=ucs2 注意: 如果终端,比如SecureCRT或者XSell不支持ucs2编码的话,那么还是会出现乱码,尽管vim已经采用正确编码格式解析了ucs2文件。

    2.5K30

    文字与编码奥秘(下)

    所以字符编码过程是: 字符------>虚拟数字 虚拟数字--->二进制数字 那怎么确定字符和虚拟数字之间关系呢?其实这就是一个 编码 过程,每一个单独字符映射为一个虚拟数字。...而UTF-16是用2个字节4个字节来表示码点,这将取决于码点在Unicode中哪个Plane中,如果码点在最基本BMP平面中,那么UTF-16将使用2个字节来编码,否则将使用4个字节来编码。...最复杂,最灵活,用最多就是UTF-8编码方式了。他可以根据码点范围使用1到4个字节来编码。 码元和码点 前面我们已经知道了,码点是由一个多个码元组成,我们用一个简单例子来了解下。 ?...但是码流是用什么格式编码我们是不知道,为此笔者自己写了一个实用工具,可以一段字符编码成不同格式,也可以一段码流用不同编码方式进行解码。...话不多说,直接看图: Text2Hex 字符用不同编码方式进行编码,并转成十六进制: ? Hex2Text 十六进制码流用不同编码方式进行解码: ?

    1.3K50

    JavaScript中二进制数据

    尤其是在遇到一些 http post 请求 websocket,发送二进制数据(字节)时,还有一些算法翻译,数据转化,协议复现,都需要不断从网络上查阅,并未系统从文档教程中入手。...,为了验证,这里使用 NodeJS 中 Buffer 来演示,当然也可以使用原生TextEncoder Buffer.from(buf.buffer).toString() // abc 你也可以直接通过数组下标的形式...其中 toString 还能转为以下编码(toString 默认 utf8) type BufferEncoding = 'ascii' | 'utf8' | 'utf-8' | 'utf16le' |...'ucs2' | 'ucs-2' | 'base64' | 'base64url' | 'latin1' | 'binary' | 'hex' 不过 Nodejs 不支持 gbk 编码,所以需要使用第三方包...() // base64编码str // hex Buffer.from(str).toString('hex') // strhex编码 Buffer.from(str, 'hex').toString

    2.2K10

    Cypress系列(95)- readFile() 命令详解

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 使读取文件并返回内容 语法格式 cy.readFile...)中需要读取文件路径 encoding 读取时需要使用编码 ascii base64 binary hex latin1 utf8 utf-8 ucs2 ucs-2 utf16le utf-16le...options log:是否命令显示到命令日志中,默认 true timeout:命令超时时间 正确用法 cy.readFile('users.json') 命令返回结果 文件内容 读取 txt 文件栗子...读取出来是一个属性对象 读取 yaml 文件栗子 测试代码 运行结果 读取图片栗子 测试代码 ? 运行结果 ? 读取 mp3 文件栗子 测试代码 ? 运行结果 ?...读取 mp4 文件栗子 测试代码 ? 运行结果 ?

    72010

    Cypress系列(96)- writeFile() 命令详解

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 写入具有指定内容文件 语法格式 cy.writeFile...)中需要写入文件路径 contents 要写入文件内容,可以是字符串、数组、对象类型 encoding 写入时需要使用编码 ascii base64 binary hex latin1 utf8...utf-8 ucs2 ucs-2 utf16le utf-16le options log:是否命令显示到命令日志中,默认 true flag:文件系统标志,默认 w encoding:写入文件时要使用编码...记住默认是 w 模式哦,是会把文件原来内容覆盖,若需要追加的话使用 a 哦 写入 json 文件栗子一 测试代码 ? 运行结果 ? 写入 json 文件栗子二 测试代码 ?... HTTP 请求响应内容保存写入到本地文件中 运行结果 ? 使用 a+ 模式栗子 测试代码 ? 运行结果 ?

    51920

    MySQL字符集学习

    字符映射成二进制数据过程叫编码,二进制数据映射到字符过程叫做解码 ASCII字符集: 有128个字符。包括空格/标点符号/数字/大小写字母和不可见字符。...它可以使用一个字节来进行编码(它别名称叫Latin1) GB2312字符集:包括汉子和拉丁字母/希腊字母/日文/俄文等。...UTF-8字符集:收录了当今世界各个国家地区使用字符,并且还在扩充。它兼容ASCII字符集。采用变长编码方式,编码一个字符时需要使用1到4字节。 mysql 不区分字符集和编码方案概念。...mysql utf8mb3: "阉割"过utf-8字符集,只使用1-3个字节表示字符。 mysql utf8mb4: 正宗utf-8字符集,使用1-4个字节表示字符。...| utf16le | 62 | | Yes | 1 | PAD SPACE | | utf16le_general_ci

    2.9K20

    C#实现十六进制与十进制相互转换以及及不同进制表示案例分享

    :从十六进制数字最右侧(个位)开始获取每一位数字获取数字乘以16^n,n从0开始将相乘后结果相加到最终值以等值十进制对应十六进制,比如 Aa作为10,Bb作为11代码实现十六进制十进制下面的代码使用上面介绍算法...,实现将十六进制字符串转换为十进制数字,通过遍历十六进制字符得到最后值。...十进制十六进制代码实现十进制十六进制实现步骤对应上面1610进制过程,代码如下:5/// /// 十进制数字十六进制/// /// <param name...dec.ToString("x2") dec.ToString("x") 中使用小写x,则转换为对应小写16进制字符串,比如15换为"f""0f"。【X对应为大写】。...Convert.ToString()实现将数字换为特定进制字符串decimal_2分别转换为16进制、8进制、2进制字符串6var decimal_2 = 15;Console.WriteLine

    2.7K11

    程序员开发常用云在线工具

    ICO转换器 可以在线裁剪图片,并转换为favicon.ico文件 IP查询 查询IP域名地理位置和宽带供应商、查看本机IP JSON格式化 JSON格式化程序可以美化压缩JSON代码,也可以...URL转为编码URL,也可以编码URL转为普通URL UTF-8编码解码 可以文本转换为UTF-8,也可以UTF-8为文本 Unicode编码解码 可以文本转换为Unicode,也可以Unicode...,计算出今天到过去未来某一天天数 时间戳转换器 工具可以时间戳转换为日期时间,也可以日期时间转换为时间戳 正则表达式 在线正则表达式测试工具可以帮助你快速测试所编写正则表达式是否正确 汉字拼音...照片素描 一款自动生成手绘风格照片工具,可以设置手绘图片模糊程度 甘特图 你能够使用该工具绘制甘特图,方便项目管理,进度计划管理 端口扫描器 扫描常用指定端口,查看端口是否开放 衣服尺码计算...可以农历转换为公历,公历转换为农历,并计算出当天农历日期、十二生肖和星座 随机密码生成器 可以随机生成一个包含数字、大写字母、小写字母、符号密码 随机数生成器 可以随机生成一个数字,也可以一次批量生成多个随机数

    58651

    Node.js中Base64编码和解码

    这包括往返于UTF-8UCS2,Base64,ASCII,UTF-16甚至HEX编码方案。...Base64 编码 要将字符串转换为Base64编码字符串,我们首先需要使用Buffer.from()方法根据给定字符串创建一个缓冲区。...此方法采用两个参数,即纯文本字符串和字符编码,并为给定编码创建缓冲区二进制数据数组。 如果未指定字符编码,则将使用UTF-8作为默认值。...您需要做就是通过使用base64作为Buffer.from()第二个参数从Base64编码字符串中创建一个缓冲区,然后使用toString()方法将其解码为UTF-8字符串。...您甚至可以使用它执行ASCII,HEX,UTF-16和UCS2编码和解码。 如果您想了解有关JavaScript中Base64更多信息,请参阅本指南。 喜欢这篇文章吗?

    17.9K50
    领券