我想请求帮助......我是从C ++开始的,我在学校完成了这项功课......我们必须编写应该阅读的函数bool UTF8toUTF16 (const char * src, const char * dst );
src 文件以UTF-8编码,并以UTF-16格式写入 dst 文件。我们也不能使用任何其他库而不是我的代码......
所以我要做的第一件事就是我创建了一个文件“xx.txt”,在经典的Windows记事本中我写了例如char'š'。然后我试着编写一个程序,以二进制模式逐字节(或逐字节)读取该文件的每个字符并打印它的值...但我的程序不能像那样...
< p> 所以我有这个文件'xx.txt',其中只有'š',它有UTF-8值'c5 a1',UTF-16值'0161'和Unicode值'161',我想它会打印出来的结果:i = 161(十六进制)或至少接近此结果的东西......到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <iomanip>
#include <iostream>
#include <fstream>
using namespace std;
int main ( void ) {
char name[] = "xx.txt";
fstream F ( name, ios::in | ios::binary );
unsigned int i;
while( F.read ((char *) & i, 2))
/* I dont know what size to write there - I would guess it s '2' - because I need 2 bytes for the char with hexUTF-16 code '0161', but 2 doesnt work*/
cout << "i = " << hex << i << " (hex) ";
cout << endl;
F.close();
system("PAUSE");
return 0;}
提前致谢
NikolasJíša
答案 0 :(得分:2)
在解析它之前,你不知道utf8中的字符有多大,你需要一次读一个“字符”,直到你有一个完整的utf8字符。
编辑 - 你没有说你输出的是什么 - 但我怀疑它是一个字节排序问题。
您可能更好地将输入(如果您知道它总是16位值)读入char数组,然后查看各个字节。
答案 1 :(得分:1)
如果您的输入是UTF-8,则需要一次读取一个字节,而不是两个(您希望i
具有类型unsigned char
) 。这为您提供了二进制数据流,您需要在UTF-8 Specification之后解码,这将生成unsigned int
s(Unicode代码点)流,然后您需要重新编码根据{{3}}。
答案 2 :(得分:0)
这取决于。如果类的作用是包含这些对象(例如 一个容器类),然后它非常惯用,而且是正常的做法 的东西。然而,在大多数其他情况下,它被认为是优选的 使用getter和setter方法。不一定名为getXxx和 setXxx ---我见过的最常用的命名约定是使用m_attr 属性的名称,只需attr两个名称 吸气剂和二传手。 (操作员重载将在它们之间进行选择 根据论点的数量。)
- 詹姆斯坎泽