Unicode与多字节

Ray*_*yne 13 c unicode multibyte visual-c++

我真的很困惑这个unicode vs多字节的东西.

假设我正在用Unicode编译我的程序(但最终,我想要一个独立于所用字符集的解决方案).

1)所有'char'都会被解释为宽字符吗?

2)如果我有一个简单的printf语句,即printf("Hello World \n"); 如果没有字符串,我可以不使用_tprintf和_T("...")吗?如果printf语句包含一个字符串,那么我应该使用_tprintf和_T("..."),即_tprintf("Hello%s \n",name); ?

3)如果我有一个文本文件(以默认格式保存,即不更改使用的默认字符集)我想要读入缓冲区,我仍然可以使用char而不是TCHAR吗?特别是如果我逐个字符地读它,即通过递增字符指针?

谢谢.

此致,Rayne

Jon*_*ler 0

假设我正在用 Unicode 编译程序(但最终,我想要一个独立于所使用的字符集的解决方案)。

这将取决于您的语言 - 例如编程语言而不是人类口语。“用 Unicode 编译我的程序”是什么意思?

  1. 所有“char”都会被解释为宽字符吗?

    • 这取决于语言和选择的选项。例如,Java 使用 16 位字符(存储 UTF-16 或 UCS-2 - 很久以前它是 UCS-2,但我认为现在是 UTF-16)。在 C 中,您必须相当努力地将基本的“char”类型解释为 8 位数量以外的任何类型 - 至少在基于 Unix 的编译器上是这样。
  2. 如果我有一个简单的 printf 语句,即 printf("Hello World\n"); 如果没有字符串,我可以保留它而不使用 _tprintf 和 _T("...") 吗?如果printf语句包含字符串,那么我应该使用_tprintf和_T("..."),即_tprintf("Hello %s\n", name); ?

    • 这需要对您正在使用的平台有一定的了解,因为它远非标准。我怀疑这是 MSVC...这让我更难获得权威,因为我不使用 MSVC。然而,ISO C99 标准(MSVC 显然不支持该标准)提供了诸如fwprintf()打印宽字符字符串之类的功能。如果您需要有关特定编译器的信息,请使用正确的信息标记您的问题。
  3. 如果我有一个文本文件(以默认格式保存,即不更改使用的默认字符集)想要读入缓冲区,我仍然可以使用 char 而不是 TCHAR 吗?特别是如果我逐个字符地读取它,即通过递增字符指针?

    • 同样,TCHAR 不是标准的 - 它是高度特定于 MSVC 的。在标准 C 中,当您对其应用适当的函数时,文件流将获得一个“方向”(面向宽的或面向字节的)。它会保持该方向,直到关闭(或使用 重新打开freopen())。