搜索
查看: 598|回复: 6

新人请教:读文本文件中文出现异常

[复制链接]

1

主题

3

帖子

17

积分

新手入门

Rank: 1

积分
17
发表于 2018-6-7 15:08:31 | 显示全部楼层 |阅读模式
win7用记事本保存4行文本文件:"d:\1\1.txt"
1263 cctv 小学同学
1289        hnws        女粉丝
1292,xjts,泥泥家二舅

读出来中文出现异常。请教如何读出中文?

import win.ui;
/*DSG{{*/
var winform = win.form(text="文件";right=468;bottom=237)
winform.add(
button={cls="button";text="read1";left=131;top=98;right=216;bottom=131;z=1};
button2={cls="button";text="read2";left=267;top=99;right=345;bottom=129;z=2}
)
/*}}*/

io.open()


//        "d:\1\1.txt"        win7用记事本保存4行文本
//1263 cctv 小学同学
//1289        hnws        女粉丝
//1292,xjts,泥泥家二舅
//


winform.button.oncommand = function(id,event){
   
                        var file1 = io.open ("d:\1\1.txt","r");
               
                        for line in io.lines(file1) {
                                str = line
                                io.print(str)
                        }
                       
}

winform.button2.oncommand = function(id,event){

                        var file1 = io.open ("d:\1\1.txt","r");
               
                        do {
                                str = file1.read()
                                io.print(str)
                        }while( str != null )

}

winform.show()
win.loopMessage();
回复

使用道具 举报

186

主题

2537

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13937
发表于 2018-6-7 15:17:55 | 显示全部楼层
因为你不是用的UTF-8编码,文本编码基础知识先了解一下。

或者打开:aardio工具->文本文件->字符集/代码页  答案都准备好了,就差看一下了。
回复

使用道具 举报

1

主题

3

帖子

17

积分

新手入门

Rank: 1

积分
17
 楼主| 发表于 2018-6-7 15:51:05 | 显示全部楼层
谢谢很快恢复!

是这样的:文本文件是别人用记事本建好再提供给我的,如果要求别人重做不太现实。现在是我应该怎样做的问题。以前用VB6或VB.net打开都很顺利没有问题的。

您的答案能否给个链接。我一时还真找不到这个答案。
回复

使用道具 举报

9

主题

39

帖子

228

积分

二级会员

Rank: 3Rank: 3

积分
228
发表于 2018-6-11 18:59:39 | 显示全部楼层

先看二楼给你回复

你这样试试    然后对比     

  1. import console;
  2. //var num = console.getNumber( "请输入数值:" )
  3. //console.log("您输入的是" ,num );

  4. var str = /*
  5. 1263 cctv 小学同学
  6. 1289        hnws        女粉丝
  7. 1292,xjts,泥泥家二舅
  8. */
  9. string.save("d:\1.txt",str);

  10. for line in io.lines("d:\1.txt") {
  11.         console.log( line )
  12. }


  13. console.log();
  14. console.log();
  15. console.pause(true);
复制代码
回复

使用道具 举报

186

主题

2537

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13937
发表于 2018-6-16 13:42:51 | 显示全部楼层
oaubtc5 发表于 2018-6-7 15:51
谢谢很快恢复!

是这样的:文本文件是别人用记事本建好再提供给我的,如果要求别人重做不太现实。现在是我应该怎样做的问题。以前用VB6或VB.net打开都很顺利没有问题的。

您的答案能否给个链接。我一时还真找不到这个答案。
即使你用VB也要看文档、看范例的。
做VB遇到最多的可能就是乱码问题,了解文本编码是常识吧?!

我的意思是你似乎对文本编码没有概念,可以先去了解一下(并不需要在aardio里查,你用任何编程语言这都是基础知识)
了解一下就是举手之劳的事,这个怎么会“ 不太现实 ”呢?!
你有几个误解:
1、UTF-8不是导致乱码的原因,UTF-8正是彻底避免乱码的解决方案,
所以aardio使用UTF-8编码,一些新的语言,例如go语言,python3都是默认支持UTF-8编码。

2、别人用记事本建好再提供给你的,不一定就是ANSI编码,记事本会在遇到UTF-8字符时自动生成UTF-8编码的文件。

3、至于你用VB、VB.Net就很顺利,但是你现在用的是aardio呀?!
不可能所有编程语言细节规则完全一样,你用VB、VB.Net不看文档你知道怎么打开文件?!

其实你看一下基础语法里就有,aardio的字符串是二进制的、并且是UTF-8兼容的,如果你直接以二进制加载,而源文件不是UTF8你需要转换一下,转换很简单: str = string.fromto(str,0,65001)

你也可以用  
var str = fsys.codepage.load("文件路径")
他会自动识别记事本所有的编码并转换为UTF-8

"aardio工具->文本文件->字符集/代码页"
你打开aardio,鼠标戳一下就能看到了,这个我怎么给你发链接呢?!又不是网页。
你自己试试再找一下?!


回复

使用道具 举报

1

主题

3

帖子

17

积分

新手入门

Rank: 1

积分
17
 楼主| 发表于 2018-6-22 16:07:44 | 显示全部楼层
    再次谢谢大家热心回复。通过网上搜索知道了一些。UTF-8可能是最终的解决方案,将来Windows的默认方式不是ANSI的时候,推广UTF-8意义更大。现在都按UTF-8保存的话,其他程序打开又会有问题。两难。
回复

使用道具 举报

186

主题

2537

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13937
发表于 2018-6-22 21:21:33 | 显示全部楼层
oaubtc5 发表于 2018-6-22 16:07
再次谢谢大家热心回复。通过网上搜索知道了一些。UTF-8可能是最终的解决方案,将来Windows的默认方式不 ...

Windows没有默认ANSI的说法,
Windows内核是Unicode,微软也推荐使用Unicode编写软件, ANSI已经被淘汰。
即使是记事本也默认就支持UTF-8,可以打开UTF-8的文本。

UTF-8并不需要推广,这个世界已经到处是UTF-8了,Go语言默认UTF-8,Python现在也改成了UTF-8,JSON都是UTF-8,URL编码都是UTF-8, 打开网页都是UTF-8, 就连你用个sqlite数据库都是默认UTF-8编码。找个不用UTF-8的地方都很难。

而且这个事也没有好太多纠结的,
在aardio 中转换编码很容易,用string.fromto一句代码就可以转换为任意编码。
使用 fsys.codepage 你可以自定义读写的编码,只是一个参数的问题,非常简单的一个事情。
import console;
import fsys.codepage;

//加载ANSI,UTF-8,Unicode编码的文本文件
var str = fsys.codepage.load("文本文件路径")

//显示文本
console.log(str);

//使用ANSI编码保存
fsys.codepage.save("文本文件路径",str,0)

//使用UTF-8编码保存
fsys.codepage.save("文本文件路径",str)

console.pause(
true);
如果直接用UTF-8,可以更简单,直接 string.save 保存即可。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-8-21 04:38 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表