- 论坛徽章:
- 307
|
本帖最后由 sunzhiguolu 于 2015-10-23 09:22 编辑
回复 8# zhlong8
大神您好, 在 Linux 环境下如何确保中文字符按照 两 个字节进行处理.
测试环境:linux
测试文本:
1.> 编码方式: utf-8
2.> 使用桌面环境, 右键创建空文档的方式创建的测试文件 input.txt
本地语言环境:- LANG=zh_CN.UTF-8
- LC_CTYPE="zh_CN.UTF-8"
- LC_NUMERIC="zh_CN.UTF-8"
- LC_TIME="zh_CN.UTF-8"
- LC_COLLATE="zh_CN.UTF-8"
- LC_MONETARY="zh_CN.UTF-8"
- LC_MESSAGES="zh_CN.UTF-8"
- LC_PAPER="zh_CN.UTF-8"
- LC_NAME="zh_CN.UTF-8"
- LC_ADDRESS="zh_CN.UTF-8"
- LC_TELEPHONE="zh_CN.UTF-8"
- LC_MEASUREMENT="zh_CN.UTF-8"
- LC_IDENTIFICATION="zh_CN.UTF-8"
- LC_ALL=
复制代码 测试代码如下: (只抓取前 10 个字符)
- #!/usr/bin/perl -w
- use strict;
- use bytes;
- while (<>){
- if (m{(.{10})}){
- my $leng = length ($1);
- printf "Length = %d, |%s|\n", $leng, $1;
- my @a_10c = split //, $1;
- foreach (@a_10c){
- printf "<%s>=%d ", $_, length ($_);
- }
- print "\n";
- }
- }
复制代码 输出结果如下:
- Length = 10, |1F 123456 |
- <1>=1 <F>=1 < >=1 <1>=1 <2>=1 <3>=1 <4>=1 <5>=1 <6>=1 < >=1
- Length = 10, |2G 7测012|
- <2>=1 <G>=1 < >=1 <7>=1 <?>=1 <?>=1 <?>=1 <0>=1 <1>=1 <2>=1
- Length = 10, |3V 1试456|
- <3>=1 <V>=1 < >=1 <1>=1 <?>=1 <?>=1 <?>=1 <4>=1 <5>=1 <6>=1
- Length = 10, |4H 234567 |
- <4>=1 <H>=1 < >=1 <2>=1 <3>=1 <4>=1 <5>=1 <6>=1 <7>=1 < >=1
复制代码 输出结果中连续的 3 个 ? (问号字符) 表示一个汉字字符, 每个汉字部分占用 3 个字节长度.
|
|