UTF-16 perl 输入输出

2024-03-16

我正在编写一个脚本,它将 UTF-16 编码的文本文件作为输入并输出 UTF-16 编码的文本文件。

use open "encoding(UTF-16)";

open INPUT, "< input.txt"
   or die "cannot open > input.txt: $!\n";
open(OUTPUT,"> output.txt");

while(<INPUT>) {
   print OUTPUT "$_\n"
}

假设我的程序将 input.txt 中的所有内容写入 output.txt 中。

这在我的 cygwin 环境中工作得很好,它使用“这是为 cygwin-thread-multi-64int 构建的 perl 5,版本 14,subversion 2 (v5.14.2)”

但在我的 Windows 环境中,它使用“这是为 MSWin32-x64-多线程构建的 perl 5,版本 12,subversion 3 (v5.12.3)”,

除了第一行之外,output.txt 中的每一行都以疯狂的符号开头。

例如:

<FIRST LINE OF TEXT>
਀    ㈀  ㄀Ⰰ ㈀Ⰰ 嘀愀 ㌀ 䌀栀椀愀 䐀⸀⸀⸀  儀甀愀渀最 䠀ഊ<SECOND LINE OF TEXT>
...

谁能解释一下为什么它在 cygwin 上工作但在 Windows 上不起作用?

编辑:按照建议打印编码层后。

在Windows环境下:

unix
crlf
encoding(UTF-16)
utf8
unix
crlf
encoding(UTF-16)
utf8

在Cygwin环境中:

unix
perlio
encoding(UTF-16)
utf8
unix
perlio
encoding(UTF-16)
utf8

唯一的区别在于 perlio 和 crlf 层之间。


[本来想等一下再给你一个彻底的答案,但如果我给你一个快速的答案可能比什么都不做要好。 ]

问题是crlfencoding层的顺序错误。不是你的错。

例如,假设你这样做print "a\nb\nc\n";使用UTF-16le(因为它更简单并且可能是您真正想要的)。你最终会得到

61 00 0D 0A 00 62 00 0D 0A 00 63 00 0D 0A 00

代替

61 00 0D 00 0A 00 62 00 0D 00 0A 00 63 00 0D 00 0A 00

我认为你不能得到正确的结果open杂注或与binmode,但可以使用open.

open(my $fh, '<:raw:encoding(UTF-16):crlf', $qfn)

您需要附加一个:utf8对于一些旧版本,IIRC。

它适用于 cygwin 因为crlf仅在 Windows 上添加层。在那里你会得到

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

UTF-16 perl 输入输出 的相关文章

随机推荐

  • 将固定大小的 Map 序列化为 CBOR

    我有以下 JSON 2 c true 3 p 10 我想转换为 CBOR 格式 根据 cbor me 我有以下输出 82A102A16163F5A103A161700A 但是 当使用 Jackson Binary CBOR Serializ
  • GCC链接器找不到标准库?

    我一直在使用 XCode 开发一个学校项目 最终产品必须以带有 makefile 的源代码形式提交 因此我编写了一个 makefile 并开始以这种方式进行编译 以确保我有一个工作副本 这是我的生成文件 all main o StackLi
  • 如何扩展具有动态形成选择器的类/混合

    如何扩展使用 组合器动态形成的 Less 类 less 产生预期输出 hello world color red foo extend hello world font size 20px 预期的 CSS 输出 hello world fo
  • pandas 数据框任意两列之间的百分比差异

    我想定义一个函数来计算任意两个 pandas 列之间的百分比差异 假设我的数据框是由以下定义的 R1 R2 R3 R4 R5 R6 A B 1 2 3 4 我希望我的计算定义为 df R7 df R3 R4 apply method cal
  • 如何分组并根据总和过滤数据框?

    所以我有一个数据框 milk countries exports 它由以下列组成 期间 特定行的年份和月份 数据集是一年中的逐月 正在做出口的 记者 国家 从 报告者 进口的 伙伴 国家 商品 由 2 项组成 既不浓缩也不加糖的牛奶和奶油
  • SqlDataReader 检查空值的最佳方法 -sqlDataReader.IsDBNull 与 DBNull.Value

    我想从数据库中检索十进制值 并且想知道检查空值的推荐方法 我见过MSDN DBNull Value 字段 http msdn microsoft com en us library system dbnull value aspx该检查很少
  • 如果我递增数组变量会发生什么?

    我知道如果指针位于堆上 则更改指针的地址是不安全的 因为稍后释放它会引起一些麻烦 但是如果指针在堆栈上声明 那么这样做安全吗 我正在谈论这样的事情 char arr one two three arr or arr 我希望我通过将 char
  • Vaadin 在另一个浏览器/选项卡/系统中关闭同一用户的 UI

    我正在 Vaadin 7 中做一个项目 我需要实现如下所示的登录功能 用户 A 登录到系统 1 他再次登录到另一个系统 2 现在我想知道如何关闭系统 1 上的用户界面 我尝试了一些方法 如果是同一个浏览器 可以关闭用户界面 但是 对于不同的
  • 可编辑组合框[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我必须创建一个可编辑的组合框 组合框包含姓名 年龄和城市 用户可以输入姓名 年龄或城市 组合框必须过滤所有包含的列表 并应显示相关列表 Eg
  • 如何在命名空间之间复制数据存储实体

    我想将一个命名空间 例如 www mysite com 中的所有数据复制到另一个命名空间 例如 nightly latest mysite appspot com 最好的方法是什么 示例命名空间不是随机的 它们是由 NamespaceFil
  • Javascript/jquery,获取 (x,y) 处的所有 div 位置。转发触碰? [复制]

    这个问题在这里已经有答案了 可能的重复 如何获取位于单击点的所有元素的列表 https stackoverflow com questions 3735278 how to get a list of all elements that r
  • 无法启动 RMI Fibonacci 服务器

    我正在学习 Java RMI 并且创建了一个非常简单的服务器来计算斐波那契数 服务器 FibonacciServer 创建一个负责计算序列 Fibonacci 的对象 并且该对象实现一个接口 IFibonacci FibonacciServ
  • UPDATE 后的 @@ROWCOUNT 是否可靠地衡量*匹配*行?

    Does ROWCOUNT可靠地告诉你有多少行matched the WHERE条款中的UPDATE 而不是实际有多少changed by it In 的文档 ROWCOUNT http msdn microsoft com en gb l
  • 设置我所有表单的可本地化属性

    有没有办法自动设置此属性 我们有数百种表单需要本地化 将所有这些表单设置为 true 将是一场噩梦 有没有办法让 Visual Studio 将解决方案 项目中的所有表单设置为 Localized true 当您创建一个新的Windows窗
  • 使用rails中的link_to在锚标记上指定附加属性

    假设我想要在 Rails 中输出这样的 html a href Action a 如何使用 Rails 中的 link to 帮助程序指定属性 角色和 tabIndex 查看link to 的 Rails 文档 http api rubyo
  • Android Studio 2.0 - 应用程序首次运行时暂停/白屏

    自从升级到 Android Studio 2 0 稳定版 以来 我注意到一个问题 而我安装的以前版本的 Android Studio 1 5 中不存在这个问题 我正在开发一个当前项目 我将在真实设备和模拟器上构建 调试版本 并运行该项目 我
  • 自定义Android通知声音

    我正在尝试在我的应用程序中实现自定义通知声音 我编写了以下代码 但应用程序仅播放默认声音 而不播放我在原始文件夹中添加的自定义声音 收到通知后 日志甚至不会抛出任何错误或异常来说明为什么不播放自定义声音 我尝试在网上搜索并尝试采用不同的方法
  • 如何在执行connectedAndroidTest时不运行特定测试?

    执行我们的一些仪器测试需要很长时间 因此 当我运行所有其他仪器测试时 我不想运行它们gradle connectedAndroidTest 为什么我不注释这些测试 Ignore http junit sourceforge net java
  • 像 Tinder 一样滑动浏览照片堆栈 - 跨平台(混合/HTML5 都可以)

    我希望创建一个像 Tinder 这样的应用程序 用户可以在其中滑动照片堆栈 有谁知道跨平台重现这种效果的方法吗 到目前为止 我正在考虑使用 jQuery Mobile 构建一个 Web 应用程序 TouchSwipe 用于滑动检测 看 ht
  • UTF-16 perl 输入输出

    我正在编写一个脚本 它将 UTF 16 编码的文本文件作为输入并输出 UTF 16 编码的文本文件 use open encoding UTF 16 open INPUT lt input txt or die cannot open gt