“子例程条目中的宽字符” - UTF-8 编码的西里尔文字作为字节序列

2024-03-06

我正在开发一个带有大字典的 Android 文字游戏 -

这些单词(超过 700 000 个)作为单独的行保存在文本文件中(然后放入 SQLite 数据库中)。

为了保护我的字典,我想用 md5 对所有长度超过 3 个字符的单词进行编码。 (我不会混淆短单词和带有罕见俄语字母的单词ъ and э,因为我想在我的应用程序中列出它们)。

这是我尝试运行的脚本Perl v5.18.2在 Mac 优胜美地上:

#!/usr/bin/perl -w

use strict;
use utf8;
use Digest::MD5 qw(md5_hex);

binmode(STDIN, ":utf8");
#binmode(STDOUT, ":raw");
binmode(STDOUT, ":utf8");

while(<>) {
        chomp;
        next if length($_) < 2; # ignore 1 letter junk
        next if /жы/;           # impossible combination in Russian
        next if /шы/;           # impossible combination in Russian

        s/ё/е/g;
    
        if (length($_) <= 3 || /ъ/ || /э/) { # do not obfuscate short words
                print "$_\n";                # and words with rare letters
                next;
        }

        print md5_hex($_) . "\n";            # this line crashes
}

正如你所看到的,我必须在 Perl 脚本的源代码中使用西里尔字母 - 这就是为什么我把use utf8;在其顶部。

然而我真正的问题是length($_)报告的值太高(可能报告字节数而不是字符数)。

所以我尝试添加:

binmode(STDOUT, ":raw");

or:

binmode(STDOUT, ":utf8");

但脚本然后就死了子程序入口处的宽字符在与print md5_hex($_).

请帮助我修复我的脚本。

我将其运行为:

perl ./generate-md5.pl < words.txt > encoded.txt

这是例子单词.txt为您提供方便的数据:

а
аб
абв
абвг
абвгд
съемка

md5_hex需要一个字节字符串作为输入,但您正在传递一个解码后的字符串(一串 Unicode 代码点)。对字符串进行显式编码。

use strict;
use utf8;
use Digest::MD5;
use Encode;
# ....
# $_ is assumed to be utf8 encoded without check
print Digest::MD5::md5_hex(Encode::encode_utf8($_)),"\n";
# Conversion only when required:
print Digest::MD5::md5_hex(utf8::is_utf8($_) ? Encode::encode_utf8($_) : $_),"\n";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“子例程条目中的宽字符” - UTF-8 编码的西里尔文字作为字节序列 的相关文章

  • s60 的 python 希伯来语字符串

    我在 S60 上使用 python 我想使用希伯来语字符串 在 GUI 上表示它们并以短信形式发送它们 看来 PythonScriptShell 不接受这样的表达式 例如 u 我能做些什么 谢谢 事态发展 我添加了这一行 coding ut
  • php中UCS2/HexEncoded字符转UTF8

    我之前问过一个问题 从 UTF 8 获取 UCS 2 HexEncoded 字符串 我在以下链接中得到了一些人的帮助 UCS2 HexEncoded 字符 https stackoverflow com questions 1872773
  • 如何让 XSLT 在 Java 中返回 UTF-8

    我正在尝试让我的 XSL 脚本使用 UTF 8 编码 像 和希腊字符这样的字符就像垃圾一样出现 让它工作的唯一方法是将结果写入文件 如果我将它写入输出流 它只会返回垃圾 System out 有效 但这可能是因为它被重定向到文件 结果需要从
  • Perl OO 方法调用第一个参数值 (->)

    就 Perl OO 而言 到底做了什么 gt do 例如我拨打 main 电话 result a b gt mymethod 在我定义的包中mymethod 我使用以下内容 my class 总的来说 我显然没有向mymethod 那么哪里
  • perl生成字符串来匹配正则表达式

    我尝试找到一种方法来生成与正则表达式匹配的字符串 例如以下正则表达式 A Z 6 6 A Z2 9 A NP Z0 9 A Z0 9 3 3 0 1 我尝试过 Cpan 上的一些 perl 模块不起作用 gt 字符串 随机 gt 正则表达式
  • MySQL 不将 ı 视为 i?

    我在 MySQL 5 7 27 中有一个用户表utf8mb4 unicode ci整理 不幸的是 没有像 i 那样进行线程化 以下查询将找不到Y lmaz select id from users where name Yilmaz 我对其
  • json_encode() 非 utf-8 字符串?

    所以我有一个字符串数组 并且所有字符串都使用系统默认值ANSI编码并从 SQL 数据库中提取 因此有 256 种不同的可能的字符字节值 单字节编码 有什么方法可以让我得到json encode 工作并显示这些字符而不必使用utf8 enco
  • Python UTF-8转换问题

    在我的数据库中 我存储了一些 UTF 8 字符 例如 名称 字段中的 通过 Django ORM 当我读到这个时 我得到了类似的东西 gt gt gt p name u xce xb1 gt gt gt print p name 我本来希望
  • 尽管手册页有免责声明,为什么“strchr”似乎可以使用多字节字符?

    From man strchr char strchr const char s int c strchr 函数返回一个指向字符 c 在字符串 s 中第一次出现的位置的指针 这里 字符 的意思是 字节 这些函数不适用于宽字符或多字节字符 不
  • 与 Ruby 1.9.X 中的 Iconv.conv("UTF-8//IGNORE",...) 等效吗?

    我正在从远程源读取数据 偶尔会得到另一种编码的一些字符 它们并不重要 我想得到一个 最佳猜测 utf 8 字符串 并忽略无效数据 主要目标是获得一个我可以使用的字符串 并且不会遇到以下错误 编码 UndefinedConversionErr
  • 字符串中unicode字符的正则表达式

    我正在使用 C 进行一些 OCR 工作 并提取了我需要使用的文本 现在我需要使用正则表达式解析一行 string checkNum string routingNum string accountNum Regex regEx new Re
  • 将阿拉伯文本分配给 R 变量

    R 无法正确显示阿拉伯文本 当我使用阿拉伯语时 我得到了非常奇怪的东西 这是一个屏幕截图 问题是我想创建一个带有阿拉伯文本的词云 我需要首先解决这个问题 R 版本 R 2 15 2 GUI 1 53 Leopard 版本 64 位 6335
  • 编写脚本时,#!/usr/bin/perl 和 #!/usr/bin/env perl 有什么区别?

    显然 这同样适用于用 python bash sh 等替代 perl 昆汀下面的答案显然是正确的 所以我接受了它 但我想我实际上的意思是 两种使用 的方式的优点和缺点是什么 调用 perl python bash 作为脚本的解释器 有人提到
  • 什么是标准 unicode 字体?

    以下操作系统的标准 unicode 字体是什么 视窗XP 视窗Vista Window 7 按照标准 我的意思是它们存在于操作系统的全新安装中 无需将它们作为附加包安装 我一直在寻找同样的东西 看起来所有 Win 操作系统中只有一种字体 L
  • 使用 Perl 计算字符串中的连续字符数

    我有一个包含多个连续字符序列的字符串 例如 aaabbcccdddd 我想将其表示为 a3b2c3d4 到目前为止 我已经想出了这个 usr bin perl str aaabbcccdddd str s 1 1 g print str n
  • 使用 Getopt::Long 解析参数的最简洁方法

    我使用 GetOpt 来解析命令行参数 我想添加一个新选项 multi 它应该得到一个如下所示的字符串 key1 abc key2 123 key3 xwz 我不知道用户想要提供多少个自定义密钥 但他可以提供 minimax5键 另外 我想
  • CPAN shell 内存不足。在 Unix 上如何给它更多的内存?

    我得到一个Out of memory 所有安装的消息 我以前从未使用过 cpan 并且不太确定它是如何工作的 我做了一个ulimit在 cpan 目录中 结果是无限的 这是我正在看的内容 usr bin perl MCPAN e shell
  • 是否有用于 AES 的纯 Perl 模块?

    是否有用于 AES 的纯 Perl 模块 地穴 Rijndael PP http search cpan org dist Crypt Rijndael PP Rijndael 是底层算法AES https secure wikimedia
  • Perl 中字符串之间的字符匹配计数

    我有一个字符串 例如字符串 1 需要与另一个字符串 字符串 2 匹配 两个字符串的长度相同并且不区分大小写 我想打印两个字符串之间的字符匹配数 E g String 1 stranger String 2 strangem Match co
  • 从日志尾部提取匹配行后退出

    我使用范围运算符来提取日志文件的一部分 例如 tail F logfile perl ne print if b d 现在 一旦提取的部分匹配 我就尝试退出该过程 我尝试过 tail F logfile perl ne print if b

随机推荐

  • SQL 查询返回几十年来的最大值

    这是使用 MYSQL我的问题如下 我有一个棒球数据库 在该棒球数据库中有一个主表 其中列出了曾经参加过比赛的每个球员 还有一个击球表 跟踪每个球员的击球统计数据 我创建了一个将这两者结合在一起的视图 因此masterplusbatting桌
  • 如何在 Django 模型中存储任意名称/值键对?

    我有一个包含很多数据字段的固定数据模型 class Widget Models model widget owner models ForeignKey auth User val1 models CharField val2 models
  • Python 中的硒

    我一直在使用 urllib2 访问网页 但它不支持 javascript 所以我看了一下 Selenium 但即使读了它的文档我也很困惑 我下载了适用于 Firefox 的 Selenium IDE 插件 并尝试了一些简单的操作 from
  • 如何将 C# 方法作为回调传递给 CLI/C++ 函数?

    我在 C CLI 中有这样的方法 void Foo OnEngineCloseCallback callback 具有这样的回调定义 typedef void OnEngineCloseCallback int String errorMe
  • SQL Server - 过去 12 个月的累计总和,但从上个月开始 (SQL Server 18)

    我需要计算过去 12 个月内某个值的累计总和 到目前为止 我的累积计算正在运行 但从当月开始 我需要过去 12 个月的总计 从从上个月开始 目前 我正在使用OVERSQL 子句 从当前行 月开始运行累积总计 请参考下面我的代码示例 SELE
  • 如何将外部资源(属性文件)添加到类路径中以便 war 可以读取?

    我们在将外部目录 具有 config properties 添加到类路径时遇到了小问题 如果我们将其添加到类路径中 我们应该能够在 Web 应用程序中读取它 Web 应用程序中有一些 Spring 应用程序会读取外部属性文件 我在任何地方都
  • CSS @font-face 不适用于 Firefox,但适用于 Chrome 和 IE

    以下代码适用于 Google Chrome beta 以及 IE 7 但是 Firefox 似乎存在问题 我怀疑这是我的 CSS 文件包含方式的问题 因为我知道 Firefox 对于跨域导入不太友好 但这只是静态HTML 不存在跨域问题 在
  • unpack_from 需要至少 1164 字节的缓冲区 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在使用 struct 来解析固定宽度字符串 但是 我在处理大于 1000 字节的固定宽度字符串时遇到了一些麻烦 例如
  • 交互设计、视觉设计、网页设计、UX设计、UI设计、UI开发之间有什么区别? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 交互设计 视觉设计 网页设计 UX设计 UI设计 UI开发之间有什么区别 BTB 下面找到的链接回答了 UI 与 UX 的问题 htt
  • Apache Flink AWS S3 Sink 是否需要 Hadoop 进行本地测试?

    我对 Apache Flink 比较陌生 我正在尝试创建一个简单的项目 将文件生成到 AWS S3 存储桶 根据文档 我似乎需要安装 Hadoop 才能执行此操作 如何设置本地环境来测试此功能 我在本地安装了 Apache Flink 和
  • Next.js:嵌套动态路由的 getStaticPaths

    想象一下你有这样的数据结构 const data posts id 1 title Post 1 slug post 1 id 2 title Post 2 slug post 2 comments id 1 postId post 1 t
  • KDB:字符串与表的比较

    我有一张表 bb bb key1 0 1 2 1 7 col1 1 2 3 4 5 col2 5 4 3 2 1 col3 11 22 33 44 55 如何进行字符串的关系比较 假设我想获取 col3 小于或等于 33 的记录 selec
  • ssl 证书代码异常

    我与 sslStream 建立了客户端服务器套接字连接 但当代码到达行时 服务器上出现异常作为服务器进行身份验证我在互联网上搜索 但找不到为什么会发生这种情况的好答案 我在项目中创建了 pfx 测试文件 并为其设置了一个简单的密码 我不知道
  • codeigniter 中漂亮的 url 设置

    我有控制器 package 函数 tour package 和参数 1 的网址 http www mysite in package tour packages 1 http www mysite in package tour packa
  • SQL数值数据类型截断值?

    我真的希望那里的一些 SQL 专家可以帮助解决这个问题 如果之前已经回答过这个问题 我深表歉意 我确实尝试找到一篇类似的帖子 但无济于事 declare theanswer numeric 38 16 select theanswer 0
  • Facebook FQL 查询使所有用户在线

    我在本地 MySQL 数据库中保存了我的应用程序的所有用户的记录 我拥有获取用户在线状态所需的所有相关信息 UID access token并授予extended permission 如何获取所有用户的在线状态 我目前使用的方法是分别查询
  • 无法在 iOS 4 中播放视频

    我已经编写了在 iPhone OS 3 1 3 中播放视频的代码 并且视频播放正常 但是当我尝试使用相同的代码播放视频时 视频在 iOS 4 中无法播放 我知道 iOS 4 的媒体播放器框架已更改 有什么方法可以在不同的操作系统上播放视频而
  • 您是否发现本机 JSON 实现中存在任何错误? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何创建弹出窗口以在rails 3中创建新记录

    我们有一个要求 网页显示连接几个表的所有记录 我们有一个 添加按钮 单击该按钮后 我必须显示一个弹出窗口 用户将在其中输入必要的详细信息 弹出窗口将有两个按钮 保存 和 取消 单击 保存 按钮 应验证字段 如果所有验证均通过 则将记录保存到
  • “子例程条目中的宽字符” - UTF-8 编码的西里尔文字作为字节序列

    我正在开发一个带有大字典的 Android 文字游戏 这些单词 超过 700 000 个 作为单独的行保存在文本文件中 然后放入 SQLite 数据库中 为了保护我的字典 我想用 md5 对所有长度超过 3 个字符的单词进行编码 我不会混淆