递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 4359|回复: 14
打印 上一主题 下一主题

[视窗] 文件读写类写出内容乱码

[复制链接]

22

主题

171

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
跳转到指定楼层
#
发表于 2024-1-24 18:11:39 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
文件打开方式.改写和重写,涉及文件不存在时创建一个新文件时,创建的文件是ANSI格式的,所以写出的内容就是乱码,貌似没有参数可以修改创建时的文件格式,只能多写点代码先新建一个Unicode的文件,再用文件打开方式.写出来解决,这样的话文件打开方式.改写和重写就成鸡筋了。



<火山程序 类型 = "通常" 版本 = 1 />

方法 日志输出 <公开 静态>
参数 日志内容 <类型 = 文本型>
{
    变量 文件操作 <类型 = 文件读写类>
    如果 (文件操作.打开文件 (取运行目录 () + "Test.log", 文件打开方式.改写, 文件共享方式.无限制))
    {
        文件操作.移到文件尾 ()
        文件操作.写出文本 (日志内容)
        文件操作.关闭文件 ()
    }

}


回复

使用道具 举报

22

主题

171

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
14#
 楼主| 发表于 2024-3-4 22:23:35 | 只看该作者

都知道是编码问题,重点是,这个文件不存在,由这个组件创建出来,必定是ANSI编码格式,直接写入内容则是UTF16编码,需要自己先把这个组件创建的文件格式转换为UTF16后才能写入内容,否则乱码。
回复

使用道具 举报

1

主题

98

帖子

437

积分

中级会员

Rank: 3Rank: 3

积分
437
13#
发表于 2024-3-2 22:55:54 | 只看该作者
编码问题啊
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
12#
发表于 2024-1-25 20:20:36 | 只看该作者
80805777 发表于 2024-1-25 17:19
utf8和ansi的文本文件没文件头

ANSI 没有 BOM,UTF-8 有,可以说是微软搞出来的,所以 Windows 里基本都认,但 Linux 那边不认可 UTF-8 的 BOM,可能会被识别为乱码。
回复

使用道具 举报

7

主题

247

帖子

2025

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2025
11#
发表于 2024-1-25 20:17:34 | 只看该作者
80805777 发表于 2024-1-25 17:19
utf8和ansi的文本文件没文件头

我用的方法是把有标志的先识别出来,剩下的当UTF8转换,如果转换时有超过1个字符无法转换的那么就是ansi
回复

使用道具 举报

6

主题

57

帖子

602

积分

高级会员

Rank: 4

积分
602
10#
发表于 2024-1-25 17:19:58 | 只看该作者
tmf19901124 发表于 2024-1-25 12:35
读写txt文件都需要自己判断编码的,utf16 utf8 utf8bom  ansi每种文件的头几个字节不同的需要自己判断 ...

utf8和ansi的文本文件没文件头
回复

使用道具 举报

346

主题

1600

帖子

6537

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6537
QQ
9#
发表于 2024-1-25 16:57:23 | 只看该作者
小问题,搞得跟个深仇大恨。
X大已经讲过解决方案了,  
使用文件读写类,打开文件。
然后取出文件尺寸。
若=0
则 写bom

然后再继续你的骚操作。
结帖。

专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

22

主题

171

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
8#
 楼主| 发表于 2024-1-25 16:06:39 | 只看该作者
Xelloss0618 发表于 2024-1-25 14:22
因为大部分文本编辑器,基本是要读到 BOM 签名才能正确识别为 UTF-16LE 编码,否则默认按 ANSI 或 UTF-8  ...

目前就是这样处理的,只是需要自己写代码处理有点别扭。
回复

使用道具 举报

26

主题

1900

帖子

6926

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
6926
7#
发表于 2024-1-25 14:22:53 | 只看该作者
曼菲士 发表于 2024-1-25 10:30
我的意思是,只要用重写、改写方式,由文件打开创建的文件必定是ANSI格式,需要开发者对文件进行处理才能 ...

因为大部分文本编辑器,基本是要读到 BOM 签名才能正确识别为 UTF-16LE 编码,否则默认按 ANSI 或 UTF-8 处理。
所以按我前面回复的,你手动加上 BOM 签名就行了。
回复

使用道具 举报

22

主题

171

帖子

1412

积分

金牌会员

Rank: 6Rank: 6

积分
1412
6#
 楼主| 发表于 2024-1-25 12:36:09 | 只看该作者
urenai 发表于 2024-1-25 11:59
文本到多字节()
以ansi写入            ps:win11过后的记事本 默认unicod编码哦。 ...

我是Win11,也在Win7下试过,文本到多字节还是乱码。
回复

使用道具 举报

7

主题

247

帖子

2025

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2025
5#
发表于 2024-1-25 12:35:54 | 只看该作者
读写txt文件都需要自己判断编码的,utf16 utf8 utf8bom  ansi每种文件的头几个字节不同的需要自己判断
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-24 01:16 , Processed in 0.099419 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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