在这样的语句中,如果两者都使用相同的编码方式(UTF-8)输入到源代码中,并且区域设置正确,它们之间是否有任何实际区别?
编辑:这些字符串打印没有问题。但我没有使用宽字符串函数,因为我也想能够使用printf等函数。因此,问题是在给定上述情况的情况下这两种打印方式是否有所不同,如果有,第二种方式是否具有任何优势?
编辑2:根据下面的评论,我现在知道这个程序可以工作 - 这是我原来认为不可能的:
printf("ο Δικαιοπολις εν αγρω εστιν\n");
printf("%ls", L"ο Δικαιοπολις εν αγρω εστιν\n");
因此,在输出时是否有任何理由更喜欢其中一种?我想第二种性能会差得多,但它是否具有任何优势(或劣势)比使用多字节文字面量?编辑:这些字符串打印没有问题。但我没有使用宽字符串函数,因为我也想能够使用printf等函数。因此,问题是在给定上述情况的情况下这两种打印方式是否有所不同,如果有,第二种方式是否具有任何优势?
编辑2:根据下面的评论,我现在知道这个程序可以工作 - 这是我原来认为不可能的:
int main()
{
setlocale(LC_ALL, "");
wprintf(L"ο Δικαιοπολις εν αγρω εστιν\n"); // wide output
freopen(NULL, "w", stdout); // lets me switch
printf("ο Δικαιοπολις εν αγρω εστιν\n"); // byte output
}
编辑3:通过查看这两种类型的操作,我进行了进一步的研究。我们来看一个更简单的字符串:
wchar_t *wides = L"£100 π";
char *mbs = "£100 π";
编译器正在生成不同的代码。宽字符串是:
.string "\243"
.string ""
.string ""
.string "1"
.string ""
.string ""
.string "0"
.string ""
.string ""
.string "0"
.string ""
.string ""
.string " "
.string ""
.string ""
.string "\300\003"
.string ""
.string ""
.string ""
.string ""
.string ""
虽然第二个是:
.string "\302\243100 \317\200"
看着Unicode编码,第二个是纯UTF-8编码。宽字符表示是UTF-32编码。我意识到这将取决于具体的实现。
因此,字面值的宽字符表示可能更可移植?我的系统不能直接打印UTF-16/UTF-32编码,因此正在自动转换为UTF-8进行输出。