打开公式编辑器,中文注释变成一串问号;或者公式名在列表里显示成方框;又或者图上 DRAWTEXT 写的中文变成怪符号——通达信公式显示乱码是三类不同的问题,长得像,位置不一样,处理方式也完全不同。先确认乱码出现在哪一处,能省掉大半排查动作。

下面按”位置 → 成因 → 处理”的顺序分四处讲。文中的目录名与文件名(T0002、PriText.dat)来自通达信技术部公开的公式文件说明,界面路径以通达信金融终端个人版为准。系统侧的设置项名称以你机器上的 Windows 版本为准,不同 Windows 版本的中文译名有差异。

一、先分清乱码出现在哪一处

乱码的词面意思太宽,先把位置分成四处,后面每处都能对应到一组固定的成因。

乱码的位置 你看得到的样子 根因落在哪一层
公式管理器左侧列表里的公式名 方框图、问号、怪符号代替了原来的中文名 界面字体与字符集
编辑器里的源码与中文注释 原本正常的中文变成问号或方块,英文与数字正常 公式文件的字节编码与读取编码不一致
图上画出来的文字 DRAWTEXT 输出的中文不正常,线条位置正常 文字参数的字符集
导入公式包之后的公式名 导入前名字正常,导入后变成乱码 导出方与导入方的环境不一致

区分这四处的依据是”哪些字符坏了”。只有中文坏、英文与数字完好,指向编码或字体缺中文;连数字和英文都变成怪符号,指向文件中途被别的程序改写过,那是文件损坏,不是乱码。

二、列表里的公式名乱码:先查字体,再查字符集

公式名在列表里显示成方框,但双击进去源码正常,那问题不在公式文件上,在这台机器能不能画出这个字。按下面两步确认。

2.1 中文字体是否缺失或损坏

通达信的界面文字由系统字体渲染。系统里缺少对应的中文字体,或者字体文件损坏时,界面上凡是中文的位置都会显示成方框,公式名只是其中一处。判断方法很直接:看软件的其他中文位置——菜单栏、状态栏、行情表头。如果这些地方也出现方框,就不是公式的问题,是系统字体的问题。

处理方式是在系统里补装一份中文字体,或者在通达信的显示设置里把界面字体换成系统里确实存在的那一份。系统里默认有的中文字体(如宋体、微软雅黑)一般都在,改完重启软件生效。

2.2 系统的非 Unicode 语言设置

另一条路径是 Windows 的”非 Unicode 程序的语言”。通达信属于非 Unicode 程序,它读取中文时用的编码由这个设置决定。这个设置被改成了中文以外的语言,软件按错误的编码去解释中文字节,公式名与界面文字就会显示成乱码。

确认路径在控制面板的区域设置里:区域 → 管理 → 非 Unicode 程序的语言。中文版 Windows 上这里应当是中文(简体,中国)。改过这里之后需要重启系统才生效,重启前看到的现象不会变。

这一节的判断标准很省事:只有公式名乱、别的中文都正常,看字体;界面上所有中文都乱,看非 Unicode 语言设置。两者混在一起查,会在正确的设置项上改来改去却看不到变化。

三、编辑器里的中文注释乱码:编码与读取不一致

通达信公式显示乱码落在这一处时,样子是:英文函数名、数字、半角符号全部正常,只有中文部分变成问号或方块。这不是字符画不出来,是字节被按另一套编码解释了。

通达信的自编公式保存在软件安装目录下的 T0002 文件夹里,其中自编指标存 PriGS.dat,系统指标存 PriCS.dat,指标相关的备注文字存 PriText.dat。这几个文件按本地编码保存字节,中文环境的 Windows 上就是 GBK 系列编码。当写入的一方按 GBK 写、读取的一方按别的编码解,中文段落就会错位。

3.1 从网页和文档里复制源码

把源码从浏览器、聊天窗口、PDF 里复制进公式编辑器,是引入编码差异的主要入口。网页的编码是 UTF-8,系统剪贴板在中间做一次转换,中文注释在转换的边界上出问题,粘进编辑器就是乱码。

处理顺序是先把源码粘到一个纯文本编辑器里,另存为本地编码的文本文件,再从文本文件里复制进公式编辑器。多这一步,剪贴板转换的环节就被绕开了。

3.2 从别的软件搬源码

同花顺、文华财经的公式源码里带中文注释,直接粘贴也会出现同样的问题。这几家软件的自编公式文件格式与通达信不同,注释部分的处理方式也不一样。

遇到这种情况,可行的做法是把注释整段删掉,只留函数与语句,中文注释在通达信里另外重新写一遍。注释不影响计算,删掉不会改变公式的结果。

{ 通达信公式里注释的两种写法 }

{ 大括号包起来的是注释,可以跨行 }

// 双斜线后面到行尾是注释

{ 从别处粘来的注释如果显示成乱码,
  直接整段删掉再重新输入,比逐字修改快 }
把乱码当成”字符打错了”去逐个改,会一直改不完。乱码是字节层面的错位,看到的每个怪字符都不是原字符的近似,改一个地方不会让别的地方跟着恢复。正确动作是整段替换,不要逐字修。

四、图上输出的文字乱码

DRAWTEXT、DRAWNUMBER 这类函数会把文字画到 K 线图上。线条和图标位置都正常,只有中文文字显示不正常,说明计算部分没问题,出问题的是文字参数。

先检查文字参数前的文字标识。通达信里 DRAWTEXT 的文字参数要把文字用引号包起来,引号前面带一个文字标识符,例如:

DRAWTEXT(C>REF(C,1), L*0.99, '放量');

← '放量' 是文字参数,前后的引号必须是英文半角
← 文字标识符与引号之间不要加空格

如果源码里的引号或文字标识符是全角字符,编译期就会报错,那属于语法层的问题,不是乱码。真正的乱码是编译通过、文字画出来了、但内容是怪符号,这时要回到上一节看字符集,而不是在这条语句上改写法。

还有一种情况只出现在特定公式上:公式里混用了两种编码写下的中文,前半段正常、后半段乱码。这类公式只能把乱码的那几段文字删掉重新输入,改不了编码。

五、导入公式包时带进来的乱码

公式包有两种后缀:.tn6 是可以导入导出的普通公式包,.tne 是加密包。从公式包导入带进来的乱码,是通达信公式显示乱码的第四个入口。用公式管理器的导入功能装进来之后公式名变乱码,指向的是导出方的环境与导入方的环境不一致。

公式包里记录的公式名是导出时那台机器的字节,导入方按自己的编码去解同一段字节,解释结果就可能不一样。处理方式不是在导入后改名字,而是回到导出环节:在导出方那台机器上,把公式名改成纯英文或纯数字,重新导出一次,再导入。

加密包 .tne 要单独说:导入后在公式管理器里看不到源码,也就改不了里面的文字。这类文件出现乱码,只能找提供方要一份未加密的 .tn6 或者源码版本,没有别的入口。

现象 能不能在导入方修 该怎么办
导入后公式名乱码,源码正常 可以,改名即可 在公式管理器里重命名,名字改成英文或数字
导入后注释与输出文字乱码,公式计算正常 可以,删注释重写 删掉中文注释,里面用到的输出文字重新输入一遍
导入后公式名与源码都乱码 不可以 找提供方重新导出一份,导出前先把公式名改成英文

六、按顺序确认,别跳步

通达信公式显示乱码的排查顺序,按”从省事到费时”排可以少绕路:

  1. 看坏掉的是哪几个字符:只有中文坏,走编码或字体;连数字英文都坏,当文件损坏处理,从备份恢复。
  2. 看别处的中文坏没坏:只有公式相关的界面坏,先处理公式文件;整个软件的中文都坏,先去改系统的非 Unicode 语言设置。
  3. 确认导入来源:是从公式包导入的,先在导出方把名字改成英文再重导一次,不要导入后再逐字修。
  4. 整段替换,不逐字改:乱码是字节错位,逐字修改不收敛,删掉整段重新输入才有效。
  5. 改完重启软件再确认:涉及系统语言设置与字体的改动,需要重启系统或软件才生效,不要在未重启的界面上判断有没有改好。
最后把范围收一下:本文说的是软件界面、公式文件编码与系统设置这三层,不涉及具体标的的判断。上面四条都确认过、乱码仍在的,剩下一种可能是公式文件本身已经被写坏,处理路径是关掉通达信,从 T0002 下的 gs_bak 备份目录里按日期取回最近的一份同名文件覆盖回去,再做一次完整备份。

站内还有 报错与卡顿排查 的其他条目,公式安装与导入 里讲公式包的导入导出细节,公式编写教程 里讲注释与语法的基础写法,可对照查看。动手删除源码里的注释或整段替换之前,先把 T0002 目录复制一份留底。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。