lixuedong 发表于 2014-2-21 20:20:43

utf8文本读入后,加入内容后,输出中文变乱码

本帖最后由 lixuedong 于 2014-2-21 23:13 编辑

我有一文本,里面有中文。是正常的。
我用一个lisp程序,在文本前面加中文。加进去的中文是正常,原来的变成乱码。



(setvar "TEXTOUTPUTFILEFORMAT" 1)
(setq txt_row1 (vl-list->string'(68 58 92 91 120 121 122 95 200 237 188 254 92)))
(setq txt_row2 txt_row1 )
(setq txt_row1 (strcat txt_row1
                     "2012cadlsp"
                     (chr 59)
                     txt_row1
                     "99lsp"
                     (chr 59)
                     txt_row1
                     "acadfonts"
                     (chr 59)
                     txt_row1
                     "hlp"
                     (chr 59)
                     txt_row1
                     "函数库"
                     (chr 59)
                     txt_row1
                     "99lsp\\dwg_ss"
                     (chr 59)
                     "</Value>"
               )
)
(write-line txt_row2 f_txt1)
(write-line txt_row1 f_txt1)
(write-line "" f_txt1)
(write-line "" f_txt1)
(setq f_txt (open (findfile "xyz_old.txt") "R"))
(setq f_txt1 (open (findfile "xyz.txt") "W"))
(while (setq txt_row (read-line f_txt))
(print txt_row)
      (write-line txt_row f_txt1)
)

(close f_txt)
(close f_txt1)


==================================================
如果先写原有文字,后加新的,新的文字是就会乱码。情况和刚才的是相反的。
如果只是其中一种,打开的中文都是正常的。

xyz_old.txt" 的是 utf8编码
cad输出的文件xyz.txt是ansi编码(cad默认是ansi)


TEXTOUTPUTFILEFORMAT
类型: 整数 保存位置: 图形 初始值: 0 提供日志文件的 Unicode 选项。 0 ANSI 格式 1 UTF-8 (Unicode) 2 UTF-16LE (Unicode) 3 UTF-16BE (Unicode)

(setvar "TEXTOUTPUTFILEFORMAT" 1 );改成utf8
但输出的xyz.txt 还是ansi编码

怎么样让它们的文字编码一致。或者让输出是utf8编码的文件?



xyp1964 发表于 2014-2-21 22:10:24

;;试试

lixuedong 发表于 2014-2-21 22:38:38

本帖最后由 lixuedong 于 2014-2-21 22:45 编辑

xyp1964 发表于 2014-2-21 22:10 static/image/common/back.gif
;;试试
程序的运行是差不多的。
xyz_old.txt这个文件,你已改成 ANSI 格式,
xyz_old.txt为 utf8 格式,一样不行的。

变成同一个类型,我的程序也行的,不会乱码。

我希望的是输出文件是utf8编码的,输出文件的格式为utf8编码的。

lixuedong 发表于 2014-2-21 23:23:04

本帖最后由 lixuedong 于 2014-2-21 23:24 编辑

增加一个D:\xyz_utf8.txt的文件(编码是utf8),再通过lisp读进了,虽然查看到是乱码。但“输入文件”和“增加的文字”保持一致了。所以输出的文件,也是utf8编码。
办法比较笨了,至少问题解决了。是个变通的办法。

(defun c:tt (/)

(setq f_txt (open "D:\\xyz_utf8.txt" "R"))
(setq txt_row1 (read-line f_txt))
(close f_txt)
(setq f_txt (open (findfile "xyz_old.txt") "R"))
(setq f_txt1 (open (findfile "xyz.txt") "W"))
(write-line txt_row1 f_txt1)
(write-line "" f_txt1)
(write-line "" f_txt1)
(while (setq txt_row (read-line f_txt))
(print txt_row)
      (write-line txt_row f_txt1)
)
(close f_txt)
(close f_txt1)
)

xyz_utf8.txt

happyboy75 发表于 2016-2-1 22:00:51

期待解决办法

雪山飞狐_lzh 发表于 2016-2-4 00:57:49

0.0
Xml的解析可以直接调用Dom
百度个vb处理xml的例子改写试试吧

happyboy75 发表于 2016-2-4 07:15:34

雪山飞狐_lzh 发表于 2016-2-4 00:57 static/image/common/back.gif
0.0
Xml的解析可以直接调用Dom
百度个vb处理xml的例子改写试试吧

没明白,dom应用没用过,我想得到utf8的文档 用write-line 或者autolisp可以调用的其他方法???

Gu_xl 发表于 2016-2-4 09:20:42

本帖最后由 Gu_xl 于 2016-2-4 09:21 编辑

加载XLRX_API
XLRX-File-ReadText
   功能:读取ANSI/UNICODE/UTF8文本文件内容
      语法: (XLRX-File-ReadText Filename )
      参数:
    filename 文件名称
   flag 提供且不为nil,则文本按行返回字符串列表
       返回值: 成功返回字符串或按行返回字符串列表
XLRX-File-SaveTextStr
   功能:将文本字串保存为ANSI/UNICODE/UTF8文本文件
      语法: (XLRX-File-TextSave strBuf/strList filename )
   参数:
   strBuf/strList 文本字符串/字符串列表
   filename 要保存的文件名称
   type 文本文件类型,可选参数,type:0=ANSI格式 1=UNICODE格式 2 =UTF8格式
返回值: 成功返回T,否则返回nil
页: [1]
查看完整版本: utf8文本读入后,加入内容后,输出中文变乱码