Perl 中字符串的长度与字符编码无关

2024-02-28

长度函数假设汉字超过一个字符。如何在 Perl 中独立于字符编码确定字符串的长度(将中文字符视为一个字符)?


The length http://perldoc.perl.org/functions/length.html函数对字符进行操作,而不是八位字节(也称为字节)。字符的定义取决于编码。汉字仍然是单个字符(如果编码设置正确!),但它们占用超过一个八位字节的空间。因此,Perl 中字符串的长度取决于 Perl 认为该字符串采用的字符编码;唯一与字符编码无关的字符串长度是简单字节长度。

确保相关字符串被标记为 UTF-8 并以 UTF-8 编码。例如,这会产生 3:

$ perl -e 'print length("长")'

而这会产生 1:

$ perl -e 'use utf8; print length("长")'

as does:

$ perl -e 'use Encode; print length(Encode::decode("utf-8", "长"))'

如果您要从文件中获取中文字符,请确保binmode $fh, ':utf8'在读取或写入文件之前;如果您从数据库获取数据,请确保数据库返回 UTF-8 格式的字符串(或使用Encode http://search.cpan.org/dist/Encode/为你做)。

我认为您不必拥有 UTF-8 格式的所有内容,您实际上只需要确保该字符串被标记为具有正确的编码。我会从前到后(甚至从侧面)使用 UTF-8,因为这是 Unicode 的通用语言,如果你在任何地方都使用它,事情会变得更容易。

您可能想花一些时间阅读佩鲁尼码 http://perldoc.perl.org/perlunicode.html如果您要处理非 ASCII 数据,请参阅手册页。

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

Perl 中字符串的长度与字符编码无关 的相关文章

  • JTextPane 的等宽字体/符号

    我想使用 JTextPane 构建类似控制台的输出 因此我使用等宽字体 textpane setFont new Font Font MONOSPACED Font PLAIN 12 这适用于所有类型的字母 如 a z 0 9 等 字符 但
  • 从字符串中删除多个子字符串 - Java

    我需要从给定字符串中删除多个子字符串 例子 String exclude one two three String input if we add one and two we get three 我希望我的程序从输入字符串中删除所有出现的
  • PHP 数字:小数点仅在需要时可见

    我想知道是否存在一些函数可以自动按十进制格式化数字 所以如果我有 所以我的答案是 如果我的数据库中有 DECIMAL 数据格式 仅当它
  • JavaScript:String 和 Array 上的 indexOf 方法的效率差异

    我很好奇效率是否存在差异indexOf两者都可用的方法Array and String在 JavaScript 中 我以为indexOf在 String 上的效率低于在 Array 上的效率 而我的new测试结果支持了这一点 例如 var
  • 如何将点击侦听器添加到 Android/Java Textview 中的字符串中?

    我想要完成的是大多数 Twitter 应用程序中的标准操作 在文本视图中 文本字符串中的单词前面可能有 提及或 主题标签 并且它们实际上能够添加点击侦听器这个词启动了另一项活动 有谁知道这是如何实现的 下面我附上了一张示例照片 显示了我想要
  • 分割文件名

    如何编写Python脚本来分割文件名 eg LN0001 07272010 3 dat 并将文件重命名为LN0001 JY 07272010 另外我如何放置 该文件 内容 中每一行的末尾每一行都是一条记录 fn LN0001 0727201
  • 从字符串中提取整数

    从字符串中提取整数并将其保存到整数数组中的最佳和最短的方法是什么 示例字符串 65 865 1 3 5 65 234 65 32 我尝试查看其他一些帖子 但找不到有关此特定问题的帖子 一些帮助和解释会很棒 看来这一切都可以完成std str
  • 缓存施瓦茨变换

    我正在学习 中级 Perl 它非常酷 我刚刚读完 施瓦茨变换 部分 在理解它之后 我开始想知道为什么变换不使用缓存 在具有多个重复值的列表中 转换会重新计算每个值的值 因此我想为什么不使用哈希来缓存结果 这是一些代码 a place to
  • 将括号子集映射到字符

    我正在尝试创建一个 Scala 方法 该方法将采用一个父括号组 表示为字符串 然后将每个括号子组映射到不同的字母 然后它应该将它们放入它返回的映射中 所以基本上我调用以下方法 如下所示 val s 2 x 3 6 val map mapPa
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • 在 Perl 中查找标量变量的数据类型

    我有一个接受用户输入的函数 输入可以是整数 浮点数或字符串 我有三个重载函数 应该根据输入数据的数据类型调用它们 例如 如果用户输入一个整数 比如100 则应该调用具有整数参数的函数 如果用户输入字符串 例如 100 则应调用具有字符串参数
  • 在字符串内打印单引号

    我想输出 XYZ s ABC 我在Python IDLE中尝试了以下3条语句 第一条和第二条语句输出 a before 带打印功能的第三条语句不输出 before 作为 Python 新手 我想了解为什么 之前输出 在第 1 条和第 2 条
  • 使用 ActivePerl 时为什么必须指定带有备份扩展的 -i 开关?

    除非我使用备份扩展指定它们 否则我无法就地编辑在 ActivePerl 下运行的 Perl 单行代码 C gt perl i ape splice F 2 0 q inserted text qq F n file1 txt Can t d
  • Android 中 DatatypeConverter.printHexBinary(byte[] array) 和 DatatypeConverter.parseHexBinary(String str) 的替代方案

    有什么替代方案DatatypeConverter printHexBinary byte array and DatatypeConverter parseHexBinary String str 在安卓中 Android 没有 class
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 用于打印 C/C++ 文件的所有函数定义的 Python 脚本

    我想要一个 python 脚本来打印 C C 文件中定义的所有函数的列表 e g abc c定义两个函数为 void func1 int func2 int i printf d i return 1 我只想搜索文件 abc c 并打印其中
  • Swift 1.2 和 Swift 2.0 中的字符串长度[重复]

    这个问题在这里已经有答案了 在以前版本的 Swift 中 我有以下代码 func myfunc mystr String if mystr utf16Count gt 3 使用最新版本的 Swift 1 2 我现在收到以下错误 utf16C
  • C++ 中的字符串到 LPCWSTR

    我正在尝试从字符串转换为 LPCWSTR 我使用多位 1 例如 LPCWSTR ToLPCWSTR string text LPCWSTR sw LPCWSTR text c str return sw 2 返回中文字符 LPCWSTR T
  • 在前两个冒号上分割字符串

    我想在前两个冒号上拆分一列字符串 但不在任何后续冒号上拆分 my data lt read table text my string some data 123 34 56 78 100 87 65 43 21 200 a4 b6 c888
  • 使用 Javascript 删除字符串的最后一个字符

    我有一个DIV与一些字符 如何在每次单击时删除文本中的最后一个字符DIV itself 删除第一个字符 div on click function this text function index text return text repl

随机推荐

  • 为什么我不能在重写的方法中添加 Contract.Requires ?

    我正在使用代码契约 实际上 正在学习使用它 我面临着一些奇怪的事情 我重写了在第 3 方程序集中定义的方法 我想添加一个Contract Require像这样的声明 public class MyClass MyParentClass pr
  • 如何减少 mousemove 事件导致的速度减慢?

    我正在运行一个相对简单的函数 更新span s innerHTML on mousemove 该应用程序是一个Leaflet http leaflet cloudmade com 地图 当鼠标移动时 缩放 平移和加载图块时会出现明显的滞后
  • 正则表达式“?:^”是什么意思?

    我正在查看这个子表达式 这是 JavaScript 中的 我知道 当它跟在一个字符后面时意味着 零次或一次 但不确定它在这种情况下意味着什么 当与组一起工作时 您通常有几个选项可以修改组的行为 foo default behavior ma
  • iOS 8 UITableView 旋转错误

    因此 在 XCode 6 上编译应用程序后 我注意到一个奇怪的错误 该错误仅在 iOS 8 上运行时才会发生 这UITableView采取错误的inner更新框架后的尺寸 现在我将尝试解释一下具体情况 我们有一个UITableView侧面旋
  • 在javascript中比较两个数字的问题

    我的html代码是这样的
  • Ruby on Rails 开关 [重复]

    这个问题在这里已经有答案了 有人可以提供一个关于如何在 Ruby 中使用 switch case 来表示变量的示例吗 我假设你指的是案例 时间 case a variable a variable is the variable we wa
  • C++ 构造函数初始值设定项列表抛出异常

    我对以下代码有问题 可以看到我已经在C的构造函数中处理了A的构造函数抛出的异常 为什么还要在main函数中再次捕获并处理异常呢 include
  • 如何使用tcl中的puts更改文本颜色

    我想通过使用 tcl 中的 put 命令来更改控制台中显示的文本颜色以简化调试 我看到很多文章是 abt tk 而不是 tcl 仅供参考 我在 Windows 7 上使用 Active tcl 我尝试过其他人提供的以下代码 http www
  • MySQL 5.1 中需要一个抽象触发器来更新审核日志

    我需要一种方法来检查表中已更改的任何条目并将其传递到审核日志中 它需要从表结构中抽象出来 例如 CREATE TRIGGER table1 update BEFORE UPDATE ON table1 FOR EACH ROW BEGIN
  • 我如何摆脱这个 unicode 字符?

    Any idea how to get rid of this irritating character U 0092 from a bunch of text files I ve tried all the below but it d
  • 如何迭代对象数组以进行预输入?

    http angular ui github io bootstrap http angular ui github io bootstrap 我想使用引导程序的预输入 并在对象中搜索两个不同的密钥对 如何迭代数组对象 另外有人可以解释一下
  • Git 可以忽略内容相同但时间戳更新的文件吗

    我在最近的网络项目中使用 FTP 我尝试使用 git 在 FTP 上保留所有更改的本地备份 FTP 服务器似乎无法支持 MFMT 命令 或者我犯了一些其他错误 下载的文件不保留其时间戳 当我对新下载的文件进行 git diff 时 Git
  • sudo pecl 在 os x lion 上安装 apc 错误

    我尝试在 OS X Lion 上使用 pecl 安装 APC sudo pecl install apc 并且它抱怨缺少 pcre h 文件 In file included from private tmp pear temp APC a
  • JavaScript typeof 曾经返回过“数组”吗?

    我在各种开源项目中都看到过这种习惯用法 it instanceof Array typeof it array 我知道后半部分在 ECMAScript 5 或 6 中不可能是真的 但是是否有一个实现可以从 typeof 返回 数组 或者这是
  • $this->getRequest()->isPost() 返回 false

    我正在处理一个现有代码 最后一个开发人员创建了一个表单 但没有使用 form 代码是 public function indexAction objRequest this gt getRequest var dump objRequest
  • 使用 split_part 后替换空字段中的值

    我有两列 id integer and version text 我正在尝试将字符串转换为version转换为整数 以便我可以选择 id 的最大 最新 版本 然而 第一个实例id将自身存储为version 例子 id version 10
  • 在 C++ WIN32 中识别后台进程并将其带到前台

    谁能告诉我如何识别特定的后台进程 即已经运行的应用程序 并将其带到前台 例如 如果记事本应用程序在后台运行 当我运行 WIN32 应用程序时 它应该识别记事本应用程序 并且记事本应该弹出或进入前台 我尝试了 SwitchToThisWind
  • 如何更改 unsigned char 中的 4 位?

    unsigned char adata unsigned char malloc 500 sizeof unsigned char unsigned char single char adata 100 如何更改 single char 中
  • 如何追查 Wildfly 8.2.0.Final 中不起眼的 HA 集群错误

    设置 我有一个 Wildfly 8 2 0 Final 应用程序服务器 使用 full ha 配置文件在域模式下运行集群 该集群由两个 Wildfly 实例组成 主实例和从实例 每个实例都运行在自己的虚拟机上 应用程序 我的项目作为 war
  • Perl 中字符串的长度与字符编码无关

    长度函数假设汉字超过一个字符 如何在 Perl 中独立于字符编码确定字符串的长度 将中文字符视为一个字符 The length http perldoc perl org functions length html函数对字符进行操作 而不是