Qt处理中文字符的问题

chengshiding 2013-05-30 01:27:36
读进去后,开始的字符串中文要不截断,要不就是显示成问号。

比如: "ABC你好"
读进去要不是"ABC",(遇到为0的字节,就结束输入了),要不是"ABC???"(已经把中文用一种编码方式编码了)。

而我想要处理原始的字节流,不管该字节是否为0。都应该全部读入,并且处理过程不因字节为0而结束。

请教各位了。3Q
...全文
267 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengshiding 2013-05-30
  • 打赏
  • 举报
回复
引用 8 楼 dbzhang800 的回复:
[quote=引用 7 楼 chengshiding 的回复:] 我感觉QFile对我的文件使用了特定编码进行了解释。我只想得到那个字节本来的值,如果qDebug有问题,那么有什么办法能打印出这个字节的值吗
QFile 不会多此一举去干别的事情的。 所有的数据都在QByteArray里面,你想怎么操作,就怎么操作。哪怕直接 qDebug() << Buffer.toHex(); [/quote] 果然如此啊,哈哈。 不过我如果想要输出Buffer[i]的16进制值怎么输出呢,qDebug可以吗
dbzhang800 2013-05-30
  • 打赏
  • 举报
回复
引用 7 楼 chengshiding 的回复:
我感觉QFile对我的文件使用了特定编码进行了解释。我只想得到那个字节本来的值,如果qDebug有问题,那么有什么办法能打印出这个字节的值吗
QFile 不会多此一举去干别的事情的。 所有的数据都在QByteArray里面,你想怎么操作,就怎么操作。哪怕直接 qDebug() << Buffer.toHex();
chengshiding 2013-05-30
  • 打赏
  • 举报
回复
我感觉QFile对我的文件使用了特定编码进行了解释。我只想得到那个字节本来的值,如果qDebug有问题,那么有什么办法能打印出这个字节的值吗
dbzhang800 2013-05-30
  • 打赏
  • 举报
回复
引用 4 楼 chengshiding 的回复:
QFile file("1.txt"); QByteArray Buffer = file.readAll(); qDebug() << Buffer; 1.txt里面的内容为"ABC你好" 输出:"ABC????" 查看文件的16进制值,里面是 41 42 43 C4 E3 BA C3 可以得知:C4 E3 为“你”的二进制值, BA C3为“好”的二进制值。
恩,一切正常,QFile正常,QByteArray也正常。但是你的 qDebug这么用就不对了
chengshiding 2013-05-30
  • 打赏
  • 举报
回复
引用 3 楼 dbzhang800 的回复:
[quote=引用 2 楼 chengshiding 的回复:] QFile从文件读进去后就截断了中文部分
不可能
引用 2 楼 chengshiding 的回复:
我如果使用CFile,但是包含头文件找不到
如果你的MFC配置正确的话,应该没问题[/quote] 就是想得到确切字节的值。而不是问号
chengshiding 2013-05-30
  • 打赏
  • 举报
回复
QFile file("1.txt"); QByteArray Buffer = file.readAll(); qDebug() << Buffer; 1.txt里面的内容为"ABC你好" 输出:"ABC????" 查看文件的16进制值,里面是 41 42 43 C4 E3 BA C3 可以得知:C4 E3 为“你”的二进制值, BA C3为“好”的二进制值。
dbzhang800 2013-05-30
  • 打赏
  • 举报
回复
引用 2 楼 chengshiding 的回复:
QFile从文件读进去后就截断了中文部分
不可能
引用 2 楼 chengshiding 的回复:
我如果使用CFile,但是包含头文件找不到
如果你的MFC配置正确的话,应该没问题
chengshiding 2013-05-30
  • 打赏
  • 举报
回复
引用 1 楼 dbzhang800 的回复:
这岂不是更简单,直接 char[]/std::string/QByteArray 都能满足你的要求
QFile从文件读进去后就截断了中文部分,我如果使用CFile,但是包含头文件找不到
dbzhang800 2013-05-30
  • 打赏
  • 举报
回复
这岂不是更简单,直接 char[]/std::string/QByteArray 都能满足你的要求
本文档是QT中文版本 内容详尽,下面是片段 信号 void activated ( int id ) 静态公有成员 QKeySequence shortcutKey ( const QString & str ) QString keyToString ( QKeySequence k ) (obsolete) QKeySequence stringToKey ( const QString & s ) (obsolete) 保护成员 virtual bool eventFilter ( QObject * o, QEvent * e ) -------------------------------------------------------------------------------- 详细描述 QAccel类用来处理键盘的加速键和快捷键。 键盘加速键是在某个组合键按下的时候出发一个动作,加速键可以处理窗口部件和它子部件里所有的键盘动作所以它不会被键盘焦点所影响。 在大多数情况下,你不需要直接使用这个类。使用QAction类建立的具有加速键的动作可以同时在菜单和工具栏里使用。如果你的兴趣只是在菜单里使用QMenuData::insertItem()或者QMenuData::setAccel()建立只作用在菜单里的加速键。那么许多窗口部件可以自动的生成加速键,比如QButton、QGroupBox、QLabel(使用QLabel::setBuddy())、QMenuBar和QTabBar。实例: QPushButton p( "&Exit", parent ); // 自动使用快捷键ALT+Key_E QPopupMenu *fileMenu = new fileMenu( parent ); fileMenu->insertItem( "Undo", parent, SLOT(undo()), CTRL+Key_Z ); QAccel包括一个加速键的列表,这个列表里的项目可以使用insertItem()、removeItem()、clear()、key()和findKey()。 每一个加速键项目是由一个标示符和 QKeySequence组成。一个单独的键组是由一个键盘码组合上改变符形成的(SHIFT,CTRL,ALT 或者 UNICODE_ACCEL)。例如,CTRL + Key_p可以作为文本打印的快捷键。这个键的键盘码在qnamespace.h里列出。还有,使用UNICODE_ACCEL可以使字符以统一码(unicode)的形式表现出来。例如 UNICODE_ACCEL + 'A' 所给出的加速键和Key_A是一样的。

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧