读取包含未知 UTF8 字符串和已知 ASCII 混合的文件
Reading a file with unknown UTF8 strings and known ASCII mixed
抱歉,我的标题令人困惑,我自己也不太确定该如何表达。我会尽量让我的问题尽可能简单。
我正在开发一个保留 "catalog" 个字符串的系统。该目录只是一个以特定方式编制索引的简单平面文本文件。文件的语法必须是 ASCII,但字符串的内容可以是 UTF8。
文件示例:
{
STRINGS: {
THISHASTOBEASCII: "But this is UTF8"
HELLO1: "Hello, world"
HELLO2: "您好"
}
}
读取 UTF8 文件不是这里的问题,我真的不在乎引号之间的内容,因为它只是复制到其他地方,没有对字符串进行任何更改。
问题是我需要解析字符串的括号和标签,以便在内存中正确存储 UTF8 字符串。我该怎么做?
编辑: 刚刚意识到我过于复杂了。我应该只复制并存储两个“”之间的任何内容,因为 UTF8 可以读入字节>_<。标记为关闭。
你只用你提到的UTF-8处理方法就可以了。
其实一字节的UTF-8字符也遵循ASCII规则
1 字节 UTF-8 类似于 0XXXXXXX。对于更多字节 UTF-8。总字节数以 1 开头,后跟 0,然后其他字节以 10 开头。
像 3 个字节:1110XXXX 10XXXXXX 10XXXXXX
5 字节:111110XX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX
当您浏览字符数组时,只需检查您读取的每个字符。你会知道它是一个ASCII(by & 0x80 get false)还是多字节字符的一部分(by & 0x80 get true)
注意:所有的unicode都是3字节的UTF-8。 Unicode 目前使用 2 个有效字节(16 位)和 3 个字节的 UTF-8 也是 16 个有效位。(参见我上面列出的 'X' 的计数)
ASCII是UTF-8的一个子集,UTF-8可以使用标准的8位字符串解析函数进行处理。所以整个文件可以作为UTF-8进行处理。去掉不需要的部分。
抱歉,我的标题令人困惑,我自己也不太确定该如何表达。我会尽量让我的问题尽可能简单。
我正在开发一个保留 "catalog" 个字符串的系统。该目录只是一个以特定方式编制索引的简单平面文本文件。文件的语法必须是 ASCII,但字符串的内容可以是 UTF8。
文件示例:
{
STRINGS: {
THISHASTOBEASCII: "But this is UTF8"
HELLO1: "Hello, world"
HELLO2: "您好"
}
}
读取 UTF8 文件不是这里的问题,我真的不在乎引号之间的内容,因为它只是复制到其他地方,没有对字符串进行任何更改。
问题是我需要解析字符串的括号和标签,以便在内存中正确存储 UTF8 字符串。我该怎么做?
编辑: 刚刚意识到我过于复杂了。我应该只复制并存储两个“”之间的任何内容,因为 UTF8 可以读入字节>_<。标记为关闭。
你只用你提到的UTF-8处理方法就可以了。
其实一字节的UTF-8字符也遵循ASCII规则
1 字节 UTF-8 类似于 0XXXXXXX。对于更多字节 UTF-8。总字节数以 1 开头,后跟 0,然后其他字节以 10 开头。
像 3 个字节:1110XXXX 10XXXXXX 10XXXXXX
5 字节:111110XX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX 10XXXXXX
当您浏览字符数组时,只需检查您读取的每个字符。你会知道它是一个ASCII(by & 0x80 get false)还是多字节字符的一部分(by & 0x80 get true)
注意:所有的unicode都是3字节的UTF-8。 Unicode 目前使用 2 个有效字节(16 位)和 3 个字节的 UTF-8 也是 16 个有效位。(参见我上面列出的 'X' 的计数)
ASCII是UTF-8的一个子集,UTF-8可以使用标准的8位字符串解析函数进行处理。所以整个文件可以作为UTF-8进行处理。去掉不需要的部分。