我实际上正在使用货币生成MS Excel文件,如果您看到我生成的文件(tinyurl.com/currencytestxls),在文本编辑器中打开它会显示正确的符号,但不知何故,MS Excel不会显示符号。我猜测编码存在一些问题。有什么想法吗?
这是我生成符号的tcl代码:
set yen_val [format %c 165]
答案 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"