相关疑难解决方法(0)

C++ wchar_t和wstrings有什么"错误"?宽角色有哪些替代方案?

我见过C++社区中的很多人(特别是freenode上的## c ++)对windows api 的使用wstrings和使用感到不满wchar_t.究竟是什么"错误"有wchar_twstring,如果我要支持国际化,有一些什么替代宽字符?

c++ unicode winapi internationalization wstring

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

有没有一种标准的方法来使用unicode字符串文件路径进行fopen?

有没有一种标准的方法来使用unicode字符串文件路径进行fopen?

c++ unicode fopen

15
推荐指数
2
解决办法
9916
查看次数

Microsoft如何处理UTF-16在其C++标准库实现中是可变长度编码的事实

标准中间接禁止使用可变长度编码.

所以我有几个问题:

如何处理标准的以下部分?

17.3.2.1.3.3宽字符序列

宽字符序列是一个数组对象(8.3.4)A,可以声明为TA [N],其中T是wchar_t(3.9.1)类型,可选择由const或volatile的任意组合限定.数组的初始元素定义了内容,包括由某个谓词确定的元素.字符序列可以由指定其第一元素的指针值S指定.

NTWCS的长度是终止空宽字符之前的元素数.空NTWCS的长度为零.

问题:

basic_string<wchar_t>

  • 如何operator[]实施以及它返回了什么?
    • 标准: If pos < size(), returns data()[pos]. Otherwise, if pos == size(), the const version returns charT(). Otherwise, the behavior is undefined.
  • size()返回元素的数量还是字符串的长度?
    • 标准: Returns: a count of the number of char-like objects currently in the string.
  • resize()工作怎么样?
    • 与标准无关,它是做什么的
  • 如何在的位置insert(),erase()和其他处理?

cwctype

  • 几乎所有东西都在这里.如何处理变量编码?

cwchar

  • getwchar() 显然无法返回整个平台 - 角色,那么这是如何工作的?

加上所有其余的角色功能(主题是相同的).

编辑:我将打开奖金以获得一些确认.我希望得到一些明确的答案或至少更明确的投票分配.

编辑:这开始变得毫无意义.这充满了完全相互矛盾的答案.你们有些人谈论外部编码(我不关心那些,UTF-8编码仍然会被存储为UTF-16一旦读入字符串,输出相同),其余只是相互矛盾.: - /

c++ utf-16

11
推荐指数
3
解决办法
813
查看次数

我们可以在Unix编译器中使用wmain()函数,还是只能在windows上使用?

我们可以在Unix编译器中使用wmain()函数,还是只在\ for windows上使用?

c c++ unix widestring wmain

10
推荐指数
2
解决办法
3405
查看次数

为什么printf格式的unicode参数没有?

使用printf将双字节字符串格式化为单字节字符串时:

printf("%ls\n", L"s:\\??????Hello");   // %ls for a wide string (%s varies meaning depending on the project's unicode settings).
Run Code Online (Sandbox Code Playgroud)

显然,有些字符不能表示为ascii字符,所以有时我看到双字节字符变成'?'的行为.标记字符.但是,这似乎取决于特定的角色.对于上面的printf,输出是:

s:\
Run Code Online (Sandbox Code Playgroud)

我希望我可以得到类似的东西:

s:\??????Hello
Run Code Online (Sandbox Code Playgroud)

我担心我已经失去了这个例子,但是当我遇到unicode字符时,我想一个字符串,用'?'替换第一个字符串 然后放弃了其余的.

所以,我的问题是,当您将宽字符串格式化为单字节字符串时应该发生什么.这里的文档:http://msdn.microsoft.com/en-us/library/hf4y5e3w.aspx说"字符显示到第一个空字符".但是,我没有看到.这是printf中的一个错误,还是我在某处记录的行为,如果有的话,在哪里.

谢谢你的帮助.

UPDATE

感谢人们给我替代使用printf的答案.我将改为另类,但出于好奇,我真的很感兴趣为什么printf没有可靠的记录行为.看起来好像它的实现者竭尽全力使它不起作用.

c c++ unicode visual-studio-2010

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

如何在C++中用fprintf编写UTF-8文件

我正在使用VisualStudio和MFC在C++中编程(只是偶尔).我用fopen和fprintf写了一个文件.该文件应以UTF8编码.有没有可能这样做?无论我尝试什么,该文件都是双字节unicode或ISO-8859-2(latin2)编码.

Glanebridge

c++ printf mfc fopen utf-8

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

如何用'%s'说明符打印一个unicode字符串?

我正在尝试调用printf()以使用 输出 Unicode 字符/字符串%s,但它不打印任何内容。

如果我这样调用printf()

 printf("\xE2\x98\xA0")
Run Code Online (Sandbox Code Playgroud)

我得到一个?.

但是,如果我这样使用%ls

printf("%ls", "?")  /* or */
printf("%ls", L"?") /* or */
printf("%ls", L"\xE2\x98\xA0")
Run Code Online (Sandbox Code Playgroud)

我什么也没打印;

另外,如何声明一个wchar_t包含 Unicode 字符的字符串? wchar_t wstro[50] = L"?"不起作用。

我需要malloc()一个wchar_t在它然后把Unicode数据?

c unicode printf

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

R,Rstudio 控制台编码窗口

我有办法在 Windows 上的 Rstudio 中更改控制台编码吗?

这不是关于以特定编码读取文件或获取脚本,而是关于更改控制台编码(编码 Sys.getlocale 产生)。

这通常不是什么大问题,但我尝试创建一个包,并且我在某些字符串和符号中使用了德语变音符号。编码roxygen2效果最好,UTF-8covr如果源文件不在控制台/系统编码中,则会出现错误。

(如果有解决方法roxygen2covr问题,这也会有所帮助。附加信息:我covr::package_coverage从控制台调用,我roxygen2通过 Rstudios Build 命令调用。)

和会话信息:

sessionInfo()
# R version 3.4.2 (2017-09-28)
# Platform: x86_64-w64-mingw32/x64 (64-bit)
# Running under: Windows >= 8 x64 (build 9200)
# 
# Matrix products: default
# 
# locale:
# [1] LC_COLLATE=German_Austria.1252  LC_CTYPE=German_Austria.1252    LC_MONETARY=German_Austria.1252 LC_NUMERIC=C                    LC_TIME=German_Austria.1252    
Run Code Online (Sandbox Code Playgroud)

更新:通过 Rstudio 中的文件获取出错的函数,加载devtools::load_all(".")和 RStudio gui 给出错误/错误的编码。

windows encoding locale r rstudio

5
推荐指数
1
解决办法
2891
查看次数

在 fmt lib C++ 中显示 unicode 字符

我想显示\xe2\x88\x9e具有 Unicode 的无穷大符号U+221E。我目前正在使用fmt库,它应该有很多支持并且是跨平台的。

\n
fmt::print("", fmt::styled("\xe2\x88\x9e >", fmt::emphasis::bold | fg(fmt::color::aquamarine)));\n
Run Code Online (Sandbox Code Playgroud)\n

我得到以下输出:

\n
? >\n
Run Code Online (Sandbox Code Playgroud)\n

我也尝试过设置:setlocale(LC_ALL, "en_US.UTF-8");没有帮助。我使用的是 Windows 11 x64。

\n

警告:

\n
warning C4566: character represented by universal-character-name \'\\u221E\' cannot be represented in the current code page (1252)\n
Run Code Online (Sandbox Code Playgroud)\n

MS Visual Studio 2022 IDE。

\n

我应该在项目属性中更改字符集吗?当前设置为:使用 Unicode 字符集,第二个选项是:使用多字节字符集

\n

c++ unicode fmt

5
推荐指数
1
解决办法
857
查看次数

如何跨平台处理UTF-16字符串?

使用 WinAPI 时,经常使用的类型是 wchar_t,但是我偶然发现许多消息来源说 wchar_t 不应该在其他平台上使用,因为它没有标准化(某些平台上的 UTF-16,UTF-32)对他人等)。如果 wchar_t 没有标准化,是否有一种类型(最好是 UTF-16)可以在 Windows、MacOS 和 Linux 上可靠地使用,并且与 WinAPI 兼容,或者有任何其他方式来确保可移植性?

c linux windows macos winapi

2
推荐指数
1
解决办法
155
查看次数