首页
学习
活动
专区
工具
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-8 、 UCS2 、 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-8 、 UCS2 、 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-8 、 UCS2 、 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

    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 文件的栗子 测试代码 ? 运行结果 ?

    73610

    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') // 将str转hex编码 Buffer.from(str, 'hex').toString

    2.2K10

    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+ 模式的栗子 测试代码 ? 运行结果 ?

    52220

    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

    3K20

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

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

    59951

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

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

    2.8K11

    php中的进制和编码

    进制和编码的关系 进制是数字上的关系 我们日常使用的是10进制,因为我们有10个手指,这是习惯和发展使然。 计算机的基础是2进制,因为电路只有通电、不通电两种状态,用0、1表示。...见这张我自己画的小图吧~ php中的进制转换 在php中 内置了挺多的进制转换函数 bindec() — 二进制转换为十进制 decbin() — 十进制转换为二进制 dechex() — 十进制转换为十六进制...decoct() — 十进制转换为八进制 hexdec() — 十六进制转换为十进制 octdec() — 八进制转换为十进制 base_convert()– 在任意进制之间转换数字 php中的2进制输出...常见的文件编码格式现在有:GBK、UTF-8 在机器传输过程中只能2进制,不管是GBK编码还是UTF-8编码,都可能是这样子的数据01010001111010101001111,至于怎么解析,就看机器通信之间的规定了...如果要输出16进制或者2进制的数据,其实我们可以先转换为10进制的数字,然后使用chr()函数,转换得到assic码,输出。

    1.7K20
    领券