RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 591969
Accepted
Artem
Artem
Asked:2020-11-17 07:06:07 +0000 UTC2020-11-17 07:06:07 +0000 UTC 2020-11-17 07:06:07 +0000 UTC

将文件从 Unicode 转换为 Perl

  • 772

我有一个这样的 Unicode 文件(十六进制):

0000000 bbef 00bf 0041 0030 0030 0030 0020 0020
0000010 0020 0020 0020 0030 0030 0030 0030 0030
0000020 0030 0030 0030 0030 0030 0030 0031 0032
0000030 0036 0031 0035 0032 0030 0030 0034 0034
0000040 0032 0031 0035 0032 0030 0031 0036 0031
0000050 0031 0030 0032 0030 0030 0030 0030 0030
0000060 0030 0031 0026 004f 0046 0031 002e 0033
.....

需要转换成ISO-8859-8和CP862编码。我是这样转换的encode('ISO-8859-8', NFC(encode('UTF-8', $line))),但是对于这两种编码中的任何一种,文件都转换不正确。

在 ISO-8859-8 中:

0000000 bb3f 003f 0041 0030 0030 0030 0020 0020
0000010 0020 0020 0020 0030 0030 0030 0030 0030
0000020 0030 0030 0030 0030 0030 0030 0031 0032
0000030 0036 0031 0035 0032 0030 0030 0034 0034

在 CP862 中:

0000000 5c3f 7b78 3030 6661 5c7d 7b78 3030 3861
0000010 007d 0041 0030 0030 0030 0020 0020 0020
0000020 0020 0020 0030 0030 0030 0030 0030 0030
0000030 0030 0030 0030 0030 0030 0031 0032 0036

脚本:

#!/usr/bin/perl
no warnings;

use utf8;
#use open ':std', ':encoding(UTF-8)'; 
use Text::Iconv;
use Unicode::Normalize qw(NFC);
use Encode qw(encode decode from_to);
use feature 'say';

for $filename (glob('*.TXT')) {
    say "Where you want to save $filename in ISO-8859-8?";
    $newfilename1 = <>;
    chomp($newfilename1);

    say "Where you want to save $filename in CP862?";
    $newfilename2 = <>;
    chomp($newfilename2);

    open (FILE_IN, '<:encoding(utf8)', "$filename");
    open (FILE_OUT1, '>:encoding(ISO-8859-8)', "$newfilename1");
    open (FILE_OUT2, '>:encoding(CP862)', "$newfilename2");
    while ($line = <FILE_IN>) {
        $line = NFC(encode('UTF-8', $line));
        print FILE_OUT1 encode('ISO-8859-8', $line);
        print FILE_OUT2 encode('CP862', $line);
    }
    close (FILE_IN);
    close (FILE_OUT1);
    close (FILE_OUT2);
}

进行此转换的正确方法是什么?

perl
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Artem
    2020-11-19T00:44:03Z2020-11-19T00:44:03Z

    结果,我通过 Bash 做到了:

    tail -c +4 "$filename" | iconv -f utf-16be -t ISO-8859-8 -o "$newfilename1"
    tail -c +4 "$filename" | iconv -f utf-16be -t CP862 -o "$newfilename2"
    

    我删除了 BOM 的前 3 个字节,并将 UTF16BE 转换为所需的编码。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5