首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UTF-8数据从MySQL获取到Linux C++应用程序

问将UTF-8数据从MySQL获取到Linux C++应用程序
EN

Stack Overflow用户
提问于 2009-10-08 20:24:09
回答 2查看 4.8K关注 0票数 2

在将从MySQL检索的UTF8数据显示到基于Linux的C++应用程序时,我遇到了一个很大的问题。UTF文本显示为问号。

该应用程序使用MySQL C应用编程接口。因此,我在mysql_init()之后、mysql_real_connect()之前传递了UTF-8选项

代码语言:javascript
复制
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, 'utf8');

和

代码语言:javascript
复制
mysql_options(&mysql,MYSQL_INIT_COMMAND, 'SET NAMES utf8');

但是没有运气。测试仍显示为问号。我使用Perl脚本(我更熟悉它;)进行了一些测试。如果我为连接指定了UTF-8选项,则文本可以正确显示:

代码语言:javascript
复制
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');

你知道如何在C++应用程序中正确显示UTF-8数据吗?

EN

回答 2

Stack Overflow用户

发布于 2013-02-25 06:57:50

这可能是一个简单的打字错误。您可以这样写:

代码语言:javascript
复制
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, 'utf8');

单引号用于指定字符文字,而不是字符串。因此,将其更改为:

代码语言:javascript
复制
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");

另外,检查mysql的类型。如果是MYSQL *,则写下:

代码语言:javascript
复制
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "utf8");

这一点同样适用于包含MYSQL_INIT_COMMAND的行。

票数 6
EN

Stack Overflow用户

发布于 2009-10-09 12:43:01

您不需要像这样设置字符集选项来获得您想要的结果。它们只是帮助数据库在排序等方面做一些合理的事情。

我怀疑您确实获得了UTF-8格式的数据,但没有正确处理它。在C语言中传递UTF-8是世界上最简单的事情。让它正确地打印出来可能是一个更大的挑战,但这当然不是MySQL的真正问题。

根据你对这篇文章的标记,我假设你是在Linux上运行这个程序。如果是这样的话,您应该能够简单地将其打印到控制台(printf()、cout等)以获得正确的表示,因为现在Linux控制台几乎总是默认使用UTF-8。检查您的LANG环境变量。

在处理Unicode时,编写只获取少量非ASCII数据(单个字符最好)的测试程序并将该程序的输出重定向到一个文件中会很有帮助。然后在十六进制编辑器中查看该文件,并至少与UCS-2LE进行比较,看看是否只是看到了错误的编码。

我是MySQL++的维护者,我可以告诉你,MySQL++在Linux上很自然地处理UTF-8,但我们不会玩任何游戏来让它做到这一点。我不明白为什么直接的C API代码不应该表现得如此自然。您可以尝试在系统上构建MySQL++并运行示例,因为它们包含UTF8测试。运行resetdb进行设置,然后运行simple1以显示resetdb放入测试DB中的UTF8数据。有关更多详细信息,请参阅发行版中的README-examples.txt。

我并不是要你切换到MySQL++,只是把它当做一个已知有效的测试。一旦你让它工作了,你可以修改这些例子来处理你自己的数据库,看看它会不会崩溃。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1540194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档