相关疑难解决方法(0)

TCHAR仍然相关吗?

我是Windows编程的新手,在阅读了Petzold的书后,我想知道:

使用TCHAR类型和_T()函数来声明字符串或者我是否应该在新代码中使用wchar_tL""字符串仍然是一种好习惯?

我将只针对Windows 2000及以上版本,我的代码将从一开始就是i18n.

c c++ windows unicode wchar-t

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

为什么不允许UTF-8作为"ANSI"代码页?

Windows _setmbcp函数允许任何有效的代码页...

(UTF-7和UTF-8除外,不支持)

好的,不支持UTF-7是有道理的:字符具有非唯一的表示形式,并且会带来复杂性和安全风险.

但为什么不是UTF-8?

据我所知,Windows API函数的"ANSI"版本将其参数转换为UTF-16,调用等效的"W"函数,并将输出中的任何字符串转换为"ANSI".这就是我一直在手动做的事情.那么为什么Windows不能为我做呢?

windows utf-8 mbcs

18
推荐指数
4
解决办法
5340
查看次数

Visual Studio字符集'未设置'与'多字节字符集'

我正在使用遗留应用程序,我正在尝试解决使用Multi byte character setNot SetCharacter Set选项下编译的应用程序之间的区别.

我理解使用Multi byte character set定义来编译_MBCS允许使用多字节字符集代码页,并且使用Not set不定义_MBCS,在这种情况下只允许单字节字符集代码页.

在使用的情况下Not Set,我假设我们只能使用此页面上的单字节字符集代码页:http://msdn.microsoft.com/en-gb/goglobal/bb964654.aspx

因此,我认为使用的是正确的Not Set,应用程序将无法编码和编写或读取远东语言,因为它们是在双字节字符集代码页(当然还有Unicode)中定义的?

接下来,如果Multi byte character定义了set,​​单字节和多字节字符集代码页是可用的,还是只有多字节字符集代码页?我猜它必须支持欧洲语言.

谢谢,

安迪

进一步阅读

这些页面上的答案没有回答我的问题,但在我的理解中有所帮助: 关于visual studio 2010中的"字符集"选项

研究

所以,就像工作研究一样......我的语言环境设置为日语

对硬编码字符串的影响

char *foo = "Jap text: ???";
wchar_t *bar = L"Jap text: ???";
Run Code Online (Sandbox Code Playgroud)

用.编译 Unicode

*foo = 4a 61 70 20 74 65 78 74 3a 20 83 65 83 …

c++ winapi character-encoding visual-studio

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

C/C++中的跨平台unicode:使用哪种编码?

我目前正在开发一个业余爱好项目(C/C++),它可以在Windows和Linux上运行,完全支持Unicode.可悲的是,Windows和Linux使用不同的编码使我们的生活更加困难.

在我的代码中,我试图尽可能地使用数据,使Windows和Linux都变得容易.在Windows中,wchar_t默认编码为UTF-16,在Linux中编码为UCS-4(如果我错了,请纠正我).

我的软件打开({_wfopen,UTF-16,Windows},{fopen,UTF-8,Linux})并将数据写入UTF-8文件.到目前为止,这一切都是可行的.直到我决定使用SQLite.

SQLite的C/C++接口允许一个或两个字节的编码字符串(单击).当然,这在Linux中不适用于wchar_t,因为Linux中的wchar_t默认为4个字节.因此,从sqlite编写和读取需要转换为Linux.

目前,代码混乱了Windows/Linux的例外情况.我希望坚持在wchar_t中存储数据的标准思路:

  • Windows中的wchar_t:文件路径没有问题,读取/写入sqlite没有问题.无论如何,将数据写入文件应该以UTF-8完成.
  • Linux中的wchar_t:由于UTF-8编码导致的文件路径异常,读取/写入sqlite(wchar_t)之前的转换,以及将数据写入文件时的窗口相同.

看完之后(这里)我确信我应该坚持使用Windows中的wchar_t.但是在完成所有这些工作之后,麻烦就开始于移植到Linux.

目前我正在考虑重做这一切以坚持使用简单的字符(UTF-8),因为它适用于Windows和Linux,记住我需要'WideCharToMultiByte'在Windows中的每个字符串来实现UTF-8.使用简单的基于char*的字符串将大大减少Linux/Windows的异常数量.

你对跨平台的unicode有经验吗?有关简单地以UTF-8存储数据而不是使用wchar_t的想法的想法?

linux windows unicode cross-platform wchar-t

9
推荐指数
1
解决办法
2741
查看次数

哪些版本的Windows不支持unicode API调用?

基于C的Win32 API具有许多函数的双重版本,以支持unicode(UTF-16)字符串和较旧的8位代码页字符串.API还定义了泛型函数和类型,以便稍微抽象出来并允许从同一代码库中编译这两个版本.

Microsoft建议始终使用泛型(请参阅函数原型的约定),以便您可以编译这两个版本.但我的问题是 - 通过8位字符串API,我们在这里讨论支持哪些版本的Windows?如果它是Windows 95,那么我的优先级就不再高了:).如果泛型仅用于支持极端遗留情况,那么直接使用UTF-16调用似乎更容易和更清晰.

c windows unicode

3
推荐指数
1
解决办法
735
查看次数

什么是TCHAR字符串和Win32 API函数的"A"或"W"版本?

什么是TCHAR字符串,例如LPTSTRLPCTSTR我如何使用它们?当我在Visual Studio中创建一个新项目时,它为我创建了这个代码:

#include <tchar.h>

int _tmain(int argc, _TCHAR* argv[])
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

例如,我如何连接所有命令行参数?

如果我想打开第一个命令行参数给出的名称的文件,我该怎么做?Windows API定义了许多函数的"A"和"W"版本,例如CreateFile,CreateFileACreateFileW; 那么这些如何彼此不同以及我应该使用哪一个?

c c++ winapi tchar visual-studio

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

wchar_t对Windows API有用了吗?

当我#include <windows.h>在C或C++中时,我被迫决定字符的格式,其中TCHAR等于charwchar_t.

我环顾四周相当多的并尽可能的职位如这一个或类似网站点破wchar_t事儿来了约一个很久以前UTF8之前,对各种原因,并不是一个特别好的解决方案的Unicode现代编程.然而,这些并没有说明已经运行的现有系统的支持wchar_t.

所以我的问题是,我应该使用哪一个?如果我使用普通的char遗嘱将来会被MS抛弃,因为在一天结束时,wchar_tAPI 的版本是最近的?或者,如果我使用wchar_t,将我的代码运行在其他现代平台上是否会很痛苦,这些平台后来使用charUTF8中的普通版本开发?

c c++ windows unicode winapi

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

Visual Studio 2019 C++ 项目中的特殊字符并用它们执行 CMD 命令

首先,我只想在控制台中使用波罗的海字符并用它们执行 CMD 命令,但问题是从默认/标准控制台 C++ 应用程序开始的。

\n
#include <iostream>\nint main() {\n    string output = "\xc4\x81\xc4\x81\xc4\x81\xc4\x8d\xc4\x8d\xc4\x8d\xc4\x93\xc4\x93\xc4\x93\xc4\x93";\n\n    cout << output << endl;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

早些时候,我在堆栈上提出了这个问题 - How to use UTF8characters in DEFAULT C++ Project OR when using mysql Connector for C++ in Visual Studio 2019 (Latin7_general_ci to UTF-8)?

\n

我在测试中发现:如果我将 UTF8 字符串转换为 Latin1 字符串,然后 cout 或打印十六进制值,我会在控制台中输出一些特殊字符。例如 -

\n
**char s2[256] = "\\xc3\\xa9";**  printed is outputted as "\xc4\xb7" THAT MEANS I need to convert strings into correct HEX values when it is needed, and some …
Run Code Online (Sandbox Code Playgroud)

c++ utf-8 iso-8859-1 visual-studio

0
推荐指数
1
解决办法
1567
查看次数