在写入文本时打印问号

Posted

技术标签:

【中文标题】在写入文本时打印问号【英文标题】:Getting question mark printed while writting to text 【发布时间】:2012-05-26 07:21:01 【问题描述】:

我正在使用 openoffice calc 宏写入文本文件,在将十六进制转换为十进制后,然后对结果使用 char 函数。当我使用函数在 openoffice 中转换时见下文 - 将 '88' 转换为十六进制。在论坛结果中正确显示。

但是,如果我们在运行下面的宏后打开文本文件,它会做同样的事情,'?'被陈列。如何更正此问题并获得文本文件中打印的确切值?

Sub Sheet2

Dim AsciiString As String
Dim t As String
Dim DataArray As Variant
intFH = FreeFile()
Open "e:\Temp.txt" For Output As intFH
 t= "&H" & "88"
 AsciiString = AsciiString & chr(cdec(t))
 Print #intFH, AsciiString
close #intFH
End Sub

【问题讨论】:

【参考方案1】:

您需要Openoffice(根据您的问题的文本和标签)或Excel(根据功能和vba代码)的解决方案吗?

关于 OpenOffice/LibreOffice:您的宏只需要稍作修改即可工作:

只需将变量t的类型更改为Long,然后 删除 cdec() 函数调用 - OpenOffice Calc 中没有这样的函数,它显然是 Excel VBA 宏的人工制品。

现在,如果您使用 ASCII 代码(十六进制 5E / 十进制 94 表示 ^,它会将 ^ 写入文件:

Sub Sheet2
    Dim AsciiString As String
    Dim t As Long
    intFH = FreeFile()
    Open "/tmp/Temp.txt" For Output As intFH
    t= "&H" & "5E"
    AsciiString = chr(t)
    Print #intFH, AsciiString
    close #intFH
End Sub

【讨论】:

嗨,这个公式的结果是“^”。公式为 =CHAR(HEX2DEC("88"))。但是,即使我在原始代码中将 t 的类型更改为 long,我也会在文本文件中得到一个问号。 我想这是由于您应用于十六进制字符串的 cdec() 函数。 AFAIK openoffice 中没有这样的公式 - 这就是我问的原因:您需要基于 excel 的解决方案还是基于 openoffice 的解决方案?我的解决方案(没有cdec())适用于openoffice。下一点是:您需要plain ASCII 编码还是ISO 编码? &H5E^ 的 ASCII 十六进制数。 您使用/显示的字符是 =CHAR(94)。我说的是 =CHAR(136),应该使用 openoffice 在文本文件中以 ascii 编码打印。 是的,因为 94 是十六进制的 5E,它是您问题中使用的字符。 Char(136) 没有说明使用哪种编码是没有意义的,因为 Char(x)x > 127 depends on the individual environment 的结果:“CHAR 使用您系统的字符映射(例如 iso-8859-1、iso-8859-2、Windows-1252、Windows-1250)来确定要返回的字符。大于 127 的代码可能不可移植。“这就是为什么你应该更喜欢 7-bt ASCII 替代品。 再说一遍:请注意HEX2DEC 是 Excel 函数,而不是 OpenOffice 函数。使用 Calc 打开 xls 文件时,可能出于兼容性原因,但要定义与 openoffice 相关的问题,您应该坚持使用 openoffice。

以上是关于在写入文本时打印问号的主要内容,如果未能解决你的问题,请参考以下文章

从旧的 Access 数据库导出时,希腊字符显示为问号或方框

Eclipse 打印问号而不是数字

log4j日志文件名与行号显示乱码? 问号? 参数问号? 日志问号?补

急求:PHP 中文写入数据库中文是问号,怎么解决

Python诱变剂未正确保存

UITextField inputview 弹出 UIPickerView 在pickerview中显示问号