Excel不显示在我的tcl代码中生成的货币符号(例如¥)

时间:2013-12-24 04:24:38

标签: html excel unicode format tcl

我实际上正在使用货币生成MS Excel文件,如果您看到我生成的文件(tinyurl.com/currencytestxls),在文本编辑器中打开它会显示正确的符号,但不知何故,MS Excel不会显示符号。我猜测编码存在一些问题。有什么想法吗?

这是我生成符号的tcl代码:

        set yen_val [format %c 165]

1 个答案:

答案 0 :(得分:1)

首先,这确实产生了一个Yen符号(为了清晰起见,我在这里只是将格式字符串放在双引号中):

format "%c" 165

然后你可以传递它。当你试图输出它时可能会出现问题;当Tcl将一个字符串写入外部世界时(在Windows上使用可能例外的终端,因为这很棘手),它该字符串编码为一个明确的字节序列。默认编码是报告的编码:

encoding system

但你可以看到它是什么,并为任何频道改变它(如果你传递新名字):

fconfigure $theChannel -encoding $theEncoding

例如,在我的系统上(使用UTF-8,它可以处理任何字符):

% fconfigure stdout -encoding
utf-8
% puts [format %c 165]
¥

如果使用不能代表特定字符的编码,则使用该编码的替换字符。对于许多编码,这是一个“?”。当您将数据发送到另一个程序(包括通过互联网连接到Web服务器或浏览器)时,双方都同意数据的编码是至关重要。有时这个协议是按照惯例(例如,系统编码),有时它是由协议定义的(HTTP头有明确定义),有时这是通过显式传输的元数据(HTTP内容)来完成的。


如果您要编写要由Excel提取的CSV文件,请使用“unicode”或“utf-8”编码,并使用确保放置字节顺序标记正确地。 Tcl不会自动编写BOM(因为在某些情况下这是错误的)。要编写BOM,请在开始编写文件时将其作为第一个事项:

puts -nonewline $channel "\ufeff"