gpt4 book ai didi

objective-c - 使用 NSFileHandle 创建 UTF8 文本文件时出现问题

转载 作者:行者123 更新时间:2023-12-03 17:07:42 26 4
gpt4 key购买 nike

我想使用 NSFileHandle 写入大型文本文件,以避免在内存中处理非常大的 NSString。我遇到一个问题,创建文件并在文本编辑应用程序 (Mac) 中打开它后,它无法正确显示 unicode 字符。如果我使用 NSString writeToFile:atomically:encoding:error: 方法将相同的文本写入文件,文本编辑会正确显示所有内容。

我在文本编辑中打开这两个文件,并将“打开文件编码”选项设置为自动,所以我不确定为什么一种方法有效而另一种方法无效。是否有某种形式的 header 来声明格式为 UTF8?

// Standard string
NSString *myString = @"This is a test with a star character \u272d";

// This works fine
// Displays: "This is a test with a star character ✭" in Text Edit
[myString writeToFile:path atomically:YES encoding:NSUTF8StringEncoding];

// This doesn't work
// Displays: "This is a test with a star character ‚ú≠" in Text Edit
[fileManager createFileAtPath:path contents:nil attributes:nil];
fileHandle = [NSFileHandle fileHandleForWritingAtPath:path];
[fileHandle writeData:[myString dataUsingEncoding:NSUTF8StringEncoding]];

最佳答案

问题不在于您的代码,而在于 TextEdit:它不会尝试将文件解码为 UTF-8,除非它有一个 UTF-8 BOM 来标识它。据推测,您的代码的第一个版本添加了这样的 BOM。请参阅this question供进一步讨论。

UTF-8 数据通常不应包含 BOM,因此您可能根本不应该修改第二个版本的代码 — 它可以正常工作。如果在 TextEdit 中打开文件必须可以工作,您应该能够通过在字符串开头显式包含 BOM (\ufeff) 来强制使用 BOM,但是,再次强调,除非确实需要,否则不应该这样做。

关于objective-c - 使用 NSFileHandle 创建 UTF8 文本文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3539709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com