相关疑难解决方法(0)

什么是' - '的ASCII字符代码?

我正在解码文本.我试图在ASCII中找到该字符的字符代码,而不是被误认为-.我尝试过失败了.有谁知道如何转换它?

unicode ascii character-encoding special-characters

23
推荐指数
3
解决办法
6万
查看次数

使用printf打印UTF-8字符串 - 宽字符串与多字节字符串文字

在这些语句中,两者都使用相同的编码(UTF-8)输入到源代码中并且语言环境设置正确,它们之间是否存在实际差异?

printf("? ??????????? ?? ???? ?????\n");
printf("%ls", L"? ??????????? ?? ???? ?????\n");
Run Code Online (Sandbox Code Playgroud)

因此有什么理由在做输出时更喜欢一个而不是另一个?我想第二个表现得差一点,但是它对多字节文字有任何优势(或劣势)吗?

编辑:这些字符串打印没有问题.但是我没有使用宽字符串函数,因为我也希望能够使用printf等等.所以问题是打印任何不同的方式(鉴于上面列出的情况),如果是这样,第二个方法有任何优势吗?

编辑2:按照下面的评论,我现在知道这个程序有效 - 我认为这是不可能的:

int main()
{
    setlocale(LC_ALL, "");
    wprintf(L"? ??????????? ?? ???? ?????\n");  // wide output
    freopen(NULL, "w", stdout);                 // lets me switch
    printf("? ??????????? ?? ???? ?????\n");    // byte output
}
Run Code Online (Sandbox Code Playgroud)

EDIT3:我通过观察这两种类型的情况做了一些进一步的研究.拿一个更简单的字符串:

wchar_t *wides = L"£100 ?";
char *mbs = "£100 ?";
Run Code Online (Sandbox Code Playgroud)

编译器生成不同的代码.宽字符串是:

.string "\243"
.string ""
.string ""
.string "1"
.string ""
.string ""
.string "0"
.string ""
.string ""
.string …
Run Code Online (Sandbox Code Playgroud)

c unicode printf utf-8 multibyte

21
推荐指数
1
解决办法
6万
查看次数

在Windows控制台中正确打印utf8字符

这是我尝试这样做的方式:

#include <stdio.h>
#include <windows.h>
using namespace std;

int main() {
  SetConsoleOutputCP(CP_UTF8);
   //german chars won't appear
  char const* text = "aäbcdefghijklmnoöpqrsßtuüvwxyz";
  int len = MultiByteToWideChar(CP_UTF8, 0, text, -1, 0, 0);
  wchar_t *unicode_text = new wchar_t[len];
  MultiByteToWideChar(CP_UTF8, 0, text, -1, unicode_text, len);
  wprintf(L"%s", unicode_text);
}
Run Code Online (Sandbox Code Playgroud)

效果是只显示我们的ascii字符.没有显示错误.源文件以utf8编码.

那么,我在这里做错了什么?

到WouterH:

int main() {
  SetConsoleOutputCP(CP_UTF8);
  const wchar_t *unicode_text = L"aäbcdefghijklmnoöpqrsßtuüvwxyz";
  wprintf(L"%s", unicode_text);
}
Run Code Online (Sandbox Code Playgroud)
  • 这也行不通.效果是一样的.我的字体当然是Lucida Console.

第三步:

#include <stdio.h>
#define _WIN32_WINNT 0x05010300
#include <windows.h>
#define _O_U16TEXT  0x20000
#include <fcntl.h>

using namespace std;

int main() { …
Run Code Online (Sandbox Code Playgroud)

c++ console mingw utf-8 windows-xp-sp3

16
推荐指数
3
解决办法
2万
查看次数