曼菲士 发表于 2024-1-24 18:11:39

文件读写类写出内容乱码

文件打开方式.改写和重写,涉及文件不存在时创建一个新文件时,创建的文件是ANSI格式的,所以写出的内容就是乱码,貌似没有参数可以修改创建时的文件格式,只能多写点代码先新建一个Unicode的文件,再用文件打开方式.写出来解决,这样的话文件打开方式.改写和重写就成鸡筋了。



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

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

}


曼菲士 发表于 2024-1-24 18:16:37


绕个方法才解决了问题。



Xelloss0618 发表于 2024-1-24 19:59:28

判断是否空文件,然后先写字节集,把 UTF16-LE 的 BOM 签名(FEFF)写进去

创世魂 发表于 2024-1-24 21:35:45

文件读写类读文本文件只能是 utf16le编码的。    用ansi打开肯定就乱码了。

曼菲士 发表于 2024-1-25 10:30:50

创世魂 发表于 2024-1-24 21:35
文件读写类读文本文件只能是 utf16le编码的。    用ansi打开肯定就乱码了。

我的意思是,只要用重写、改写方式,由文件打开创建的文件必定是ANSI格式,需要开发者对文件进行处理才能用写入文本、写文本行之类的命令写出正常文本。

如果开发这不处理,直接写出文本就会是乱码。

重点问题是 用重写、改写方式,由“文件打开”创建的文件必定是ANSI格式。

tmf19901124 发表于 2024-1-25 12:35:54

读写txt文件都需要自己判断编码的,utf16 utf8 utf8bomansi每种文件的头几个字节不同的需要自己判断

曼菲士 发表于 2024-1-25 12:36:09

urenai 发表于 2024-1-25 11:59
文本到多字节()
以ansi写入            ps:win11过后的记事本 默认unicod编码哦。 ...

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

Xelloss0618 发表于 2024-1-25 14:22:53

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

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

曼菲士 发表于 2024-1-25 16:06:39

Xelloss0618 发表于 2024-1-25 14:22
因为大部分文本编辑器,基本是要读到 BOM 签名才能正确识别为 UTF-16LE 编码,否则默认按 ANSI 或 UTF-8...

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

urenai 发表于 2024-1-25 16:57:23

小问题,搞得跟个深仇大恨。
X大已经讲过解决方案了,
使用文件读写类,打开文件。
然后取出文件尺寸。
若=0
则 写bom

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

页: [1] 2
查看完整版本: 文件读写类写出内容乱码