dram.me

CLIPS和Tcl的Unicode支持

补遗

  1. 下面的理解应该存在问题,从这个例子中可以看到,Tcl是可以处理UTF-8字符串的。—— 2017-10-21

  2. 在StackOverflow上对此做了提问,需要设置-encoding选项。但依然有疑问,为何Tcl没有默认设置?另外tclsh中则不存在这个问题。—— 2017-10-22

  3. 除了对单个channel的编码进行设置外,还可以设置全局的默认编码,通过Tcl_SetSystemEncoding接口实现,另外Tcl_GetEncodingNameFromEnvironment接口可以获取系统的编码设置。详细的说明,可以查看上面SO问题中的讨论。—— 2017-10-23

CLIPS和Tcl对Unicode都有基本的支持,例如IO、索引、计数等。但两者存在一个大的不同,CLIPS内部使用UTF-8存储,而Tcl使用UTF-16存储。这样在两者对接时字符串处理上需要多考虑些。

当前的方案是沿用CLIPS的UTF-8存储,在Tcl中处理时不做任何转化。例如使用Tcl_WriteRaw的接口处理输入输出。这样只要外围是UTF-8的环境,就不会存在问题。