使用 unicode 字符创建文件名

2023-12-02

我正在寻找一些有关如何使用 Unicode 字符创建文件名的指南。考虑:

use open qw( :std :utf8 );
use strict;
use utf8;
use warnings;

use Data::Dump;
use Encode qw(encode);

my $utf8_file_name1 = encode('UTF-8', 'æ1', Encode::FB_CROAK | Encode::LEAVE_SRC);
my $utf8_file_name2 = 'æ2';
dd $utf8_file_name1;
dd $utf8_file_name2;
qx{touch $utf8_file_name1};
qx{touch $utf8_file_name2};
print (qx{ls æ*});

输出是:

"\xC3\xA61"
"\xE62"
æ1
æ2

为什么我是否使用 UTF8 编码文件名并不重要? (无论如何,文件名仍然是有效的 UTF8。)


因为一个名为“Unicode Bug”的错误。相当于以下情况正在发生:

use Encode qw( encode_utf8 is_utf8 );

my $bytes = is_utf8($str) ? encode_utf8($str) : $str;

is_utf8检查标量使用两种字符串存储格式中的哪一种。这是一个你永远不必担心的内部实现细节,除了 Unicode Bug 之外。

你的程序之所以有效是因为encode总是返回一个字符串,其中is_utf8返回 false,并且use utf8;总是返回一个字符串,其中is_utf8如果字符串包含非 ASCII 字符,则返回 true。

如果你不这样做encode正如你应该做的那样,有时你会得到错误的结果。例如,如果您使用过"\x{E6}2"代替'æ2',即使字符串具有相同的长度和相同的字符,您也会得到不同的文件名。

$ dir
total 0

$ perl -wE'
   use utf8;
   $fu="æ";
   $fd="\x{E6}";
   say sprintf "%vX", $_ for $fu, $fd;
   say $fu eq $fd ? "eq" : "ne";
   system("touch", $_) for "u".$fu, "d".$fd
'
E6
E6
eq

$ dir
total 0
-rw------- 1 ikegami ikegami 0 Jul 12 12:18 uæ
-rw------- 1 ikegami ikegami 0 Jul 12 12:18 d?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 unicode 字符创建文件名 的相关文章

  • Perl 删除目录中的所有文件

    我怎样才能删除allPerl 中目录中的文件 不删除目录 我的主机只允许最多 250 000 个 文件 而我的 tmp 文件夹会在所有会话 cookie 运行的情况下快速填充 250 000 个 qouta 在这种情况下我无法删除 tmp
  • 使用 Perl 循环 JSON [重复]

    这个问题在这里已经有答案了 我是 Perl 的新手 想要循环这个 JSON 数据并将其打印到屏幕上 我怎样才能做到这一点 arr Year 2012 Quarter Q3 DataType Other 3 Environment STEVE
  • 如何转换 UTF-8 <-> UTF16 可移植

    有没有一种简单 可移植的方法 至少是 win32 linux 将 UTF 16 转换为 UTF 8 并返回 最好使用升压 谢谢你的帮助 托比亚斯 Both libiconv http www gnu org software libicon
  • python:unicode问题

    我正在尝试解码从文件中获取的字符串 file open Downloads lamp post csv r data file readlines data 0 xff xfeK x00e x00y x00w x00o x00r x00d
  • 替换非 UTF8 字符

    在 php 中 我需要替换字符串中的所有非 UTF8 字符 然而 并不是通过某种等价物 比如iconv功能与 TRANSLIT 但是由一些选定的角色 例如 or 例如 通常 我希望用户能够看到找到无效字符的位置 我没有找到任何执行此操作的函
  • 为什么我们从 MultiByte 转换为 WideChar?

    我习惯于处理 ASCII 字符串 但现在使用 UNICODE 我对一些术语感到非常困惑 什么是多字节字符以及什么是widechar有什么不同 多字节是指在内存中包含多个字节的字符吗 widechar只是一个数据类型来表示吗 为什么我们要从M
  • Perl:LWP::UserAgent 对于重定向 URL 始终返回代码 200

    我有一个简单的 url 它执行 302 临时错误 移至另一页 我尝试在 URL 返回代码 200 表示 OK 时检索它 并在返回 200 以外的其他内容时停止 My code my ua LWP UserAgent gt new env p
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • 迭代哈希数组

    我编写了下面的例程 迭代哈希值 0 7 并打印出每个哈希值中特定键的值 我需要获取每个哈希中 b4 的值 我想取消 0 7 当存在不同数量的哈希值时使用更智能的东西 例如 有时只有 2 个 也可能有 160 个 my out decode
  • Perl Tk 模块有哪些缺点?

    与在 Perl 中创建 GUI 的其他解决方案相比 Tk 模块有哪些缺点 我最近浏览了 Perl 的各种 gui 模块 这是我的总结 免责声明 最终我发现现有模块都不能满足我的需求 所以我开始编写自己的 gui 工具包 Tk 工作起来很不错
  • TCPDF UTF-8 符号未显示

    我使用最新的 TCPDF 版本 5 9 但在编码方面遇到一些奇怪的问题 我需要立陶宛语语言符号 例如 但只能得到其中的一小部分 其他的还是这样 所以我该怎么做 我使用默认的 times 字体 它带有 TCPDF 下载 任何帮助 将不胜感激
  • unix df 上的正则表达式帮助

    我需要一些帮助来调整我的代码以查找此 UNIX 中的另一个属性df output Ex Filesystem Size Used Avail Capacity Mounted on dev ad4s1e 61G 46G 9 7G 83 ho
  • Perl YAML 模块无法识别标量类型

    我加载以下 yaml 文件 foo bar s 1 hx 0x34 用这段代码 use YAML qw LoadFile Dump use Data Dumper my d LoadFile test yaml print Dumper d
  • 如何让 mod_perl 在更改时重新加载源文件?

    我正在开发一个带有 mod 的应用程序 perl 并在每次更改代码时重新启动服务器是一个巨大的阻力 我还是想用mod perl 用于开发 因为我计划将其用于实时服务器 我在文档中没有看到有关如何执行此操作的任何内容 想法 我认为 Apach
  • 在 Java 中对多语言环境字符串进行排序

    我正在尝试按字符串字段 国家 地区 对对象列表进行排序 每个国家 地区都使用其母语 阿根廷 澳大利亚 奥地利 例如 我想要做的是让 出现在 A 国家之后 因为字母 对应于拉丁语 B 我正在尝试使用默认的 Collat er 但非拉丁名称仍然
  • Java 正则表达式中 \w 和 \b 的 Unicode 等效项?

    许多现代正则表达式实现解释 w字符类简写为 任何字母 数字或连接标点符号 通常 下划线 这样 正则表达式就像 w 匹配像这样的词hello l ve GO 432 or gefr ig 不幸的是 Java 没有 在爪哇 w仅限于 A Za
  • PHP:使用 UTF-8 的 strpos 和 substr

    假设我有一个很长的 UTF 8 编码字符串 并说我想检测是否 var存在于该字符串中 假设 var始终是简单的字母或 ASCII 字符数字 例如 hello123 我不需要使用mb strpos or iconv strpos正确的 因为只
  • 用于表示过滤的漏斗的 Unicode 字符

    是否存在在常见计算机操作系统上广泛使用的表示过滤 例如漏斗 的 unicode 字符 到目前为止我发现的一些最相似的字符 Y V
  • Perl 三元条件运算符

    我正在尝试在脚本中编写更高效的代码 并且有时会实现三元条件运算符 我不明白为什么在循环中使用三元条件运算符时会得到额外的结果 usr bin perl use strict use warnings my array Serial 123
  • 在 Perl 中如何用空格填充字符串的一部分?

    你更喜欢哪个版本 usr bin env perl use warnings use strict use 5 010 my p 7 33 my prompt my key very important text my value Hell

随机推荐

  • 在 Android 中嵌入 Knopflerfish 不起作用

    我正在尝试将 Knopflerfish 框架嵌入到 Android 应用程序中以动态加载和卸载包 我跟着this教程 我做的第一步是从下载framework jarthis链接 并将其添加到我的 Eclipse 项目中的类路径中 另外 下面
  • Titanium - Android 外部存储 - 创建新目录,然后将文件写入其中

    我们是否不能简单地以编程方式在 Android 的外部 SD 卡 而不是设备的内部存储器 上创建新目录 并且我们不能在 SD 卡上写入文件 Titanium 是否受到如此限制 即使在使用后也始终在内部存储器上写入文件Ti Filesyste
  • 直线与 AABB 矩形相交?

    最好不使用任何类型的循环 因为这将在游戏中使用 我希望将一条线与任意大小的矩形相交 但我也希望返回交点 有可能 我已经做了一些谷歌搜索 但仍然没有解决 该线使用 x1 y1 x2 y2 定义 矩形也有这两点 我建议简单地对构成矩形的每个线段
  • 可变参数模板参数总是必须放在最后吗?

    我是否总是必须将可变参数模板参数放在模板参数的末尾 template
  • 空手道框架 - 如何检查比赛中的条件 OR 包含响应

    作为示例 我尝试使用匹配包含来验证我的架构响应和数据类型 有时它返回 null 有时它会返回字符串 我正在尝试以下操作 但断言失败 因为它的计算结果不为 true 我正在尝试以下操作 match each response data Res
  • 表单中的条件字段

    我需要创建一个 Form 类 该类可能有或没有 ReCaptcha 字段 具体取决于用户是否登录 因为这是一个 CommentForm 所以我无权访问request表单创建 定义上的对象 所以我不能依赖它 For the POST请求解决方
  • 电子邮件触发 PHP 脚本...可能吗?

    我需要根据我控制的电子邮件帐户设置自动回复trigger words在电子邮件正文中 而且 它还需要根据发送到此电子邮件帐户 属于我的网站 的触发词从数据库表中添加 删除行 并且在某些情况下 如果发送到一个论坛 则需要在论坛内创建一个主题
  • 在 Swift 中从 NSString 创建 NSData

    我试图最终拥有一个NSMutableURLRequest具有有效的HTTPBody 但我似乎无法获取我的字符串数据 来自UITextField 转化为可用的NSData object 我见过这种方法可以用另一种方式 NSString dat
  • Facebook 博主的开放图标签 - OG 图像太小。我可以指定全尺寸图像而不是缩略图吗?

    Blogger 不允许您在每个帖子中指定开放图形图像 目前 模板中有一段代码指定自动生成的缩略图作为facebook的开放图图像 问题是 缩略图是 72 72 而 Facebook 现在要求 OG 图像的宽度至少为 200px 否则默认为页
  • Pyinstaller 在 python 3.7 中不起作用(找不到模块“编码”)

    我有下面的测试程序 我用 pyinstaller Python 版本 3 7b Windows 10 64 位 编译代码 在编译和错误期间注意到警告 我将不胜感激任何解决这个问题的见解 Test py import encodings pr
  • 在函数内部创建方法

    我正在尝试在函数内创建方法 我可以这样做 function sample sample show function alert 我会看到警报呼叫sample show 但出于代码美化的原因 我想将所有方法声明移至函数内 我尝试过 funct
  • Python 图像库 - 文本渲染

    我正在尝试使用 PIL 渲染一些文本 但坦率地说 结果很糟糕 例如 这是我在 Photoshop 中编写的一些文本 PIL 的结果是 正如您所看到的 PIL 的结果不太令人满意 也许我只是比较挑剔 但是有没有什么方法可以使用 PIL 绘制文
  • 添加抗锯齿功能

    我正在尝试使用抗锯齿功能 但我不知道为什么它不起作用 Pen pen new Pen Color Black 3 Pen r new Pen Color YellowGreen 3 Graphics b panel2 CreateGraph
  • Angular:路由器、子项(可选)参数

    所以 我希望生成这样的路径 比赛 页面 球队 赛季 其中 team 和 season 是可选参数 所以我可以有一个像这样的网址 matches results 4 2017 or matches results 4 or matches r
  • mysql 使用内连接更新查询

    我有两张桌子顾客和订单 我想用一个查询更新两个表中的不同值 例如 客户表有一个城市列 值为德国 订单表有状态列 值为保留 我想将德国更改为伦敦 并保留通过一个查询来解决 这是下面的查询 UPDATE customer order INNER
  • 将 HTML 和 javascript 代码添加到 R 中的 flexdashboard

    我有以下创建 Flexdashboard 的代码 title Untitled output flexdashboard flex dashboard orientation columns vertical layout fill run
  • 如何在openresty lua中使用内容的第一个字节将tcp请求分派到后端

    我已经启动了一个带有一个 tcp 服务器和两个后端的 openresty tcp服务器根据tcp流的内容将请求分发到后端 以下是 openresty 配置示例 stream define a TCP server listening on
  • chronic 有解析的日期格式选项吗? (红宝石)

    我需要告诉慢性病 日期的格式是日 月 年 这可能吗 我传递给chronic的数据也可以是今天 昨天 2天前的单词 目前慢性病给了我2 Dec 2010代替12 Feb 2010 from 12 02 2010 我能想到的唯一解决方案是在将字
  • Jquery 根据数字内容更改对象的 CSS 类

    将动态输出 0 100 的百分比 想要添加基于百分比的 CSS 类 红色代表 0 蓝色代表 100 标记将是 span class blue 100 span 原本我也有这样的想法 span contains 100 css color 0
  • 使用 unicode 字符创建文件名

    我正在寻找一些有关如何使用 Unicode 字符创建文件名的指南 考虑 use open qw std utf8 use strict use utf8 use warnings use Data Dump use Encode qw en