【问题标题】:How to correctly display characters from different languages?如何正确显示不同语言的字符?
【发布时间】:2013-05-12 17:43:53
【问题描述】:

我正在使用 Visual C++/Windows API 完成应用程序,并且正在使用 MySql C 连接器。

整个应用程序代码使用ANSI,MySql C Connector也是ANSI。

此程序将在装有 Windows XP/Vista/7 或 8 的波兰和德国计算机上使用。

我想在以下位置正确显示德语变音符号和波兰重音字符:

  • DialogBox 控件(从语言文件中加载字符串)
  • 生成的 XHTML 文档
  • 从显示在控件和 XHTML 文档中的 MySql 数据库中检索的字符串

我听说过 MultiByteToWideChar 和 Unicode 函数(MessageBoxW 等),但应用程序代码已接近完成,转换工作量很大...

如何以最少的工作和时间正确地进行字符编码?

可能为非 Unicode 程序更改系统代码页?

【问题讨论】:

    标签: c++ mysql winapi character-encoding


    【解决方案1】:

    首先,当然:MySQL 返回什么代码集?也许: 将数据写入数据库时​​使用了什么代码集?

    除此之外,我认为您无法避免使用 宽字符或多字节字符:对于单字节 字符,德语将使用 ISO 8859-1(代码页 1252)或 ISO 8859-15,波兰 ISO 8859-2(代码页 1250)。但是什么是 您在自己的代码中处理字符吗?你也许可以 无需太多更改即可摆脱 UTF-8(代码页 65001)。 真正的问题是角色最初来自哪里 (尽管将它们翻译成 UTF-8 立即在源头);我不认为Windows 尊重输入的代码页。

    虽然知道它对你没有多大帮助,但你正在处理 有一个几乎不可能的问题,因为这么多取决于 程序之外的东西:像编码这样的东西 例如,显示字体或键盘驱动程序。实际上, 程序在屏幕上显示一件事并不少见, 和输出到打印机时不同的东西,或者 在屏幕上显示一件事,但如果 数据被写入文件,并用另一个程序读取。这 情况正在好转——现代 Unix 和 Internet 逐渐(非常逐渐)标准化 UTF-8,无处不在 对于所有内容,Windows 通常使用 UTF-16 纯 Windows 的一切(但需要支持 UTF-8 互联网)。但即使使用平台标准也无济于事 如果人类客户端已经安装(并且正在使用)字体 没有你需要的字符。

    【讨论】:

    • 当我写入 MySql 并用我的程序检索时,所有字符都是正确的。当我使用 phpMyAdmin 编写但使用程序字符检索时不正确。但我不知道在德语 Windows 上它是否也是正确的(我只有波兰语 Windows)。在 MySql 中是 utf8_bin。
    • @David 正确的定义是什么?我认为 MySQL 在很大程度上是内容中立的,至少对于 varchar 字段。所以所有程序都会取回所写的内容。但实际上写的不是字符,而是代码点——小整数值。问题是读取的程序如何解释这些值。如果您编写 UTF-8,并且读取的程序将这些值解释为 ISO 8859-1,那么它将无法工作。这就是为什么我说这是一个几乎不可能的问题——除非你对链中的所有元素有绝对的控制权。
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2019-07-19
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多