【问题标题】:encoding issue in PerlPerl 中的编码问题
【发布时间】:2014-06-06 12:34:37
【问题描述】:

我的工具 IO 信息:

○ 我正在从 VB.net 创建输出文本文件 (.txt) 作为文件名 paraText.txt

paraText.txt 将是 Perl 的输入文件


paraText.txt 内容:

Gerade innerhalb der kulturhistorischen Behandlung nimmt die Kultivierung der Zeit durch den Menschen und dessen Zeitbewusstsein einen zentralen 广场。时代文化下的Stichwort 人类学的文化史研究 Erkenntnissuche, welches Bewusstsein der Mensch von seiner Zeit hat, wie er mit seiner Zeit umgeht, und ob bzw。 wi er sie 格式塔, sie mit Sinn auflädt und strukturiert。 Dabei wird sinnfällig, dass sich jede Kultur nicht zuletzt durch ihren Umgang mit der Zeit und deren Gliederung definiert: Man unterscheidet zurückliegende und bevorstehende, teils willkürlich, teils durch gesellschaftliche bzw。 naturgegebene Einflüsse eingetretene und noch zu erwartende Ereignisse。 Einen Großteil dieser Ereigniskultur bildet – der — Komplex des Festlichen。


问题:

○ 从 VB.net 创建输出 txt 文件时,我得到正确的文本如下:

○ 在 Perl 的调试阶段阅读该文本时,我得到的文本类似于未格式化:

可以看到上图第一行编码不正确,

注意:我在输入和输出中都使用了相同的 .txt,但在 perl 5.16.3 中使用 Komodo edit 8.5、notepad++ 进行调试时无法正确读取文本

我试过了:

○ 我使用 UTF8 编码从 vb.net 编写文本文件,

System.Text.Encoding.UTF8

○ 我也在 Perl 中使用 UTF8 编码,方法如下:

use Encode;
use utf8;
use open IO => ':utf8';
use Encoding::FixLatin qw(fix_latin);;
binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";
binmode STDIN,  ":utf8";

我的代码示例:

#!/usr/bin/perl -w
use strict;
use Cwd;
use HTML::Entities;
use HTML::Entities::Numbered;
use HTML::Strip;
use Encode;
use utf8;
use open IO => ':utf8';
use Encoding::FixLatin qw(fix_latin);;

binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";
binmode STDIN,  ":utf8";

my $indPara = getcwd()."/paraText.txt";
open(INDPARA, $indPara) || die "Indesign paraText not found on location!";
my $indesignPara = <INDPARA>;
$indesignPara = fix_latin($indesignPara);
print decode_entities($indesignPara);
close INDPARA;

# I am getting value for $indesignPara as unformatted text like shown in above incorrect image

请大家解决这个问题

提前致谢

维马尔

【问题讨论】:

  • 您用来显示文件的任何内容似乎都在第一行使用了不同的字体。纯文本文件不指定字体,因此与 Perl 无关。尝试使用其他工具查看文件。
  • 感谢 Choroba,是的,你是对的,我为任何文本的第一行显示不同的字体,我尝试使用 Sublime 查看,在 sublime 中它显示正确,所以我尝试复制并找到这两个内容在一个文件中,但我只能找到 1 项,这是真正的文本文件内容
  • 但我无法获取格式化文本
  • 我将重复我从您的previous question 提出的问题-“您的输入文件的编码是什么?您如何从输入文件中读取数据?您如何解码您的数据从您的输入文件中读取。您希望在输出文件中使用什么编码?您如何将数据写入输出文件?您如何对写入输出文件的数据进行编码?"
  • 请给我们一个非常简短但完整的示例程序来演示该问题。您可能还缺少其他一些东西。另外,我在学习 Perl 的末尾有一个 Perl Unicode 入门。

标签: vb.net perl encoding utf-8 decode


【解决方案1】:

如果您从 VB 端正确地创建文件,则不需要在 Perl 端修复任何内容。只需将其读取为 UTF-8:

open INDPARA, '<:utf8', $indPara or die ...;

之后,您阅读的任何内容都应该准备就绪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2011-04-30
    • 2015-11-08
    相关资源
    最近更新 更多