perl tk将界面输入的汉字不能输出到读取的EXCEL表格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl tk将界面输入的汉字不能输出到读取的EXCEL表格相关的知识,希望对你有一定的参考价值。

如上面图所示,界面的汉字不能输出到读取的EXCEL表格,输出到文本可以,但作为变量传到读取的EXCEL表格成了乱码,我读取EXCEL表格是这样读取的
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3; # die on errors...
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application'); # get already active Excel
my $Book = $Excel->Workbooks->open("f:/bb.xls"); # open Excel file
my $Sheet = $Book->Worksheets(1); # select worksheet number 1
$Sheet->Range("A1")->'Value'=[["$name2"]];

取出的值需要先进行转码。你可以试试下面这个:


use Unicode::UTF8simple;
$uref = new Unicode::UTF8simple;
$name2 = $uref->fromUTF8('gb2312',$name2);

如果还不行的话,把取到的值输出到一个文件里,看一下倒底是什么编码,再考虑如何进行转码。

追问

打印到屏幕是乱码的,输到文本是正常的,但读取文件传到EXCEL还是乱码,

追答

那就应该是UTF-8编码,你可以看看,用windows记事本打开文件,看到是正常的,然后选另存为,存编码那里是不是UTF-8。用我给你的那段代码,应该是可以的。你试试把转之前和转之后的内容都打印出来看看内容。

追问

用你给的编码打印出来是“'?”这个乱码,我知道怎么回事了,如果编译过的中文读进EXCEL就成了乱码,没编译过的就是正常的,这要怎么搞呢?

追答

你直接$name2 = "测试文本", 这种已经可以正常放到Excel了,就不需要再转码了啊!是要把Tk里拿到的文本,直接放到Excel不正常的,这种转码后再放到Excel里面。

追问

就是因为要在TK界面输入再传到读取的EXCEL,所以搞不了,如果在界面不转码就是乱码,转码又不能传到EXCEL

追答

你搞两个变量就行啊,一个用于界面,另一个用于excel

参考技术A 可以把输入的内容做成下拉菜单,让客户选择,没有的输入告警,客户不存在,这样既能解决你的问题,又更适合给别人使用,毕竟不是每个人都知道有哪些客户型号。追问

老兄,你不了解我人用意,我是要做一个在哪个公司都能通用的脚本,一个公司那么多工程师,每个工程师的名字都不一样,当然要做表格那个人自己输入自己的名字了

Perl - 验证网页表单中的汉字输入?

【中文标题】Perl - 验证网页表单中的汉字输入?【英文标题】:Perl - Validate Chinese character input from web page form? 【发布时间】:2018-08-24 20:31:35 【问题描述】:

我的 Perl 脚本接受并处理来自网页表单中文本字段的输入。它是为网页的英文版编写的,效果很好。

还有一个中文版的页面(一个单独的页面,不是同一页面上的两种语言),现在我需要我的脚本来处理它。此页面上的用户输入应为中文。

预计需要在 UTF-8 中工作,我补充说

use utf8;

这在英文页面上仍然可以正常工作。

但是,例如,为了定义一个使用中文字符进行比较的字符串变量,我必须使用 utf-8 编码保存 Perl 脚本本身。一旦我这样做,我就会得到可怕的 500 服务器错误。

很明显,我要解决这个问题,任何有用的方向将不胜感激/

谢谢。

编辑 - 请参阅下面我的澄清帖子。

【问题讨论】:

use utf8 只会告诉 Perl 脚本中的文本是 UTF-8 编码的。为了帮助你,你需要展示你的一些代码。中文页面的编码是什么?您如何将表单输入从表单获取到脚本?你的服务器软件是什么?脚本如何与之交互? 您需要显示您的 500 错误详细信息 感谢您的反馈。我想我误导了人们。请参阅下面的说明。 【参考方案1】:

正确处理utf8

use strict; use warnings;

use utf8;
use open(IO => ':encoding(utf8)');
binmode $_, ":utf8" for qw/STDOUT STDIN STDERR/;

open(my $fh, '<:utf8', '/file/path'); # if you need a file-handle

# code.....

检查

why-does-modern-perl-avoid-utf-8-by-default perluniintro

【讨论】:

感谢您的回复,但我认为我误导了这个问题。你能在下面看到我的澄清吗?谢谢。 您的回复让我想到了大致正确的方向并进行了更多研究。谢谢。还没有完全解决,但我会开始一个新的 Q,因为这个问题不是真的。【参考方案2】:

很抱歉 - 我认为我包含太多信息而未能很好地表达我的问题。

问题是 - 如果我将脚本保存为 ANSI 格式并将其上传到服务器,它对于英文页面就可以正常工作。本来想在脚本中使用汉字,我把它保存为UTF-8格式并重新上传,突然英文页面抛出500。

我使用 Hello World 脚本进行了测试:

#!/usr/bin/perl -T
use strict;
use warnings;

print "Content-type: text/html\n\n";

print "Hello, world!\n";

保存为 ANSI 时工作正常 - 保存为 UTF8 时失败 500。

【讨论】:

以上是关于perl tk将界面输入的汉字不能输出到读取的EXCEL表格的主要内容,如果未能解决你的问题,请参考以下文章

无法将所有输出存储到Perl中的数组

Perl[Tk] 实时读入数据到表格

“无法识别的类型'员工'。忽略。C:/ .....”从.xml读取输入并将输出写入.xls文件+ perl时出错

Perl - 验证网页表单中的汉字输入?

如下:为啥C语言读取文件中的数据并输出时有乱码出现?本来输入的是数字,然后从文件中读取后就变汉字

在网页中运行 Perl/TK GUI