马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
Autocad 中 autolisp 是ANSI处理字符串
_$ (strlen "晓东CAD")
7
一个汉字是两个字节,vl-string->list 对非 ASCII 字符中文系统下得到的是 GBK 编码,不是 UNICODE
_$ (vl-string->list "晓东")
(207 254 182 171) => CF FE B6 AB
通过这个网址可以查询
https://www.qqxiuzi.cn/bianma/zifuji.php
对文本文件的读写,autolisp 提供的是 read-line/write-line 和 read-char/write-char ,read-line 读取是按 ANSI 格式读取,中文 Windows 下 用记事本保存时一般有四种格式选择, ANSI / UTF-8 / Unicode / Unicode big endian ,如果要读取的文件是 ANSI 格式,不管里面是否有中文都可以正确读取,如果是后面三种格式使用 read-line 就可能读取出来的是乱码。
使用二进制编辑器打开文本文件,按 HEX 模式查看,可以看到文件的编码格式,下表是常见的几种编码格式
在 Autolisp 中 使用 read-char 读入前面几个字节就可你判断该文本文件的编码格式:
UTF-8 -> 239 187 191
Unicode -> 255 254
Unicode big endian -> 254 255
read-char 读出来的是 10 进制格式
对于 UTF-8 和 Unicode 格式文件, Autolisp 要正确读取可以采用
1 使用外部工具将文本文件转换为 ANSI 格式,如记事本
2 使用 read-char 读取后再行处理
UTF-8 格式文本文件
read-char 读取后按 UTF-8 编码规则,127 及以下为单字节,以上是三个字节表示一个字符,可以将三个数转换为一个整数,然后再转换为 HEX 的Unicode 形式
Unicode 及 Unicode big endian 格式就是大数一个在前一个在后,read-char 读取后去掉格式头,后面的表两两一组,由 十进制数转换为 HEX 就是字符的 Unicode 码
最后 Unicode 码转换为易懂的字串,不考虑外部工具,在Autocad内实现就用 Entmakex + 宋体 写入 \\u+XXXX ,然后用 entget 取出字符串,entdel 清理掉临时实体。
UTF-8 编码转 int

- (defun ul2i (a b c / d e)
- (setq d (lsh (logand a 31) 12)
- e (logior d (lsh (logand b 63) 6))
- )
- (logior e (logand c 63))
- )
|