标签: mbcs

Windows上MBCS和UTF-8的区别

我正在阅读关于Windows上的字符集和编码.我注意到Visual Studio编译器(用于C++)中有两个编译器标志,称为MBCS和UNICODE.他们之间有什么区别?我没有得到的是UTF-8在概念上与MBCS编码有何不同?另外,我在MSDN中找到以下引用:

Unicode是一种16位字符编码

这否定了我读到的关于Unicode的任何内容.我认为unicode可以使用不同的编码进行编码,例如UTF-8和UTF-16.有人能否对这种混乱有所了解?

windows unicode character-encoding mbcs

58
推荐指数
4
解决办法
3万
查看次数

将字符串中的第一个字母转换为大写

我有一个字符串:"apple".如何只将第一个字符转换为大写并获取一个新的字符串形式"Apple"

我也可以有一个包含多字节字符的字符串.

如果字符串的第一个字符是多字节字符怎么办?

c++ string mbcs

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

MBCS使用Visual Studio构建MFC C++项目时出错

我使用Visual Studio打开了现有的MFC项目,当我构建时,我收到以下错误消息:

Error 1 error MSB8031: Use of MBCS encoding in MFC projects require an additional library to be downloaded and installed. Please see http://go.microsoft.com/fwlink/?LinkId=286820 for more information. C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\v120\Microsoft.CppBuild.targets
Run Code Online (Sandbox Code Playgroud)

这是关于什么的?

c++ mfc mbcs visual-studio-2013 visual-studio-2015

20
推荐指数
2
解决办法
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
查看次数

如何知道Unicode字符的首选显示宽度(以列为单位)?

在Unicode的不同编码中,例如UTF-16leUTF-8,字符可能占用2或3个字节.许多Unicode应用程序不像处理所有拉丁字母那样处理Unicode字符的显示宽度.例如,在80列文本中,一行应包含40个中文字符或80个拉丁字母,但大多数应用程序(如Eclipse,Notepad ++和所有知名文本编辑器,我敢于有任何好的例外)只计算每个汉字作为拉丁字母的1宽度.这肯定会使结果格式变得丑陋且不对齐.

例如,制表符宽度为8将得到以下难看的结果(将所有Unicode计为1个显示宽度):

apple   10
banana  7
??      6
???     31
pear    16
Run Code Online (Sandbox Code Playgroud)

但是,预期的格式是(将每个汉字计为2个宽度):

apple   10
banana  7
??    6
???  31
pear    16
Run Code Online (Sandbox Code Playgroud)

对字符显示宽度的不正确计算使得这些编辑器在进行制表对齐,换行和段重组时完全没用.

虽然,字符的宽度可能会因不同的字体而异,但在固定大小的终端字体的所有情况下,汉字始终是双倍宽度.也就是说,尽管有字体,但每个汉字最好以2宽度显示.

解决方法之一是,我可以通过将编码转换为GB2312来获得正确的宽度,在GB2312编码中每个汉字占用2个字节.但是,GB2312字符集(或GBK字符集)中不存在某些Unicode字符.而且,一般来说,从编码大小(以字节为单位)计算显示宽度并不是一个好主意.

简单地计算(\u0080... \uFFFF)范围内Unicode中的所有字符,因为2宽度也不正确,因为在该范围内还散布着许多1宽度字符.

计算阿拉伯字母和韩文字母的显示宽度时也很困难,因为它们通过任意数量的Unicode代码点构造一个字/字符.

因此,Unicode代码点的显示宽度可能不是整数,我认为没关系,它们可以在实践中基于整数,至少比没有好.

那么,在Unicode标准中是否有与char的首选显示宽度相关的属性?或者任何Java库函数来计算显示宽度?

unicode text-formatting mbcs character-properties

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

将MFC应用程序分段转换为Unicode/MBCS

我有一个大的MFC应用程序,我扩展到允许多语言输入.目前,我需要允许用户在单个对话框的编辑框中输入Unicode数据.

有没有办法在不为整个应用程序打开UNICODE或MBCS的情况下执行此操作?我现在只需要转换一小部分应用程序.是否可以分段进行,如果是这样,怎么做?


澄清:我可以使用:: GetWindowTextW()从窗口中获取Unicode信息.我试图弄清楚如何允许用户在窗口中输入Unicode文本.目前,用户在windows-1252代码页之外键入的字符显示为"?".有没有办法来解决这个问题?

c++ unicode mfc mbcs

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

使用“ C”语言环境时,为什么printf可以显示非ASCII字符?

注意:我要求的是Microsoft Visual C ++ 2008上的实现定义的行为(在2005+上可能是相同的)。操作系统:Win7的简体中文安装。

当我执行带w的非ASCII I / O时,这让我感到惊讶printf。例如

   // This won't be necessary as it's the system default code page.
   //system("chcp 936");

   // NULL to show current locale, which is "C"
   printf ("%s\n", setlocale(LC_ALL, NULL));
   printf ("?\n");
   printf ("%s\n", setlocale(LC_ALL, "English"));
   printf ("?\n");
Run Code Online (Sandbox Code Playgroud)

输出:

Active code page: 936
C
?
English_United States.1252
?D
Run Code Online (Sandbox Code Playgroud)

调试器中的内存占用量显示"?"已编码为两个字节:0xD6,,0xD0这是简体中文的代码页936中该字符的代码点。它不应该是在代码点范围的"C" locale其中,最有可能的0x0 ~ 0x7F

题:

为什么仍可以在“ C”语言环境中正确显示字符?因此,我猜测语言环境与否无关printf?但是,我想问一问,为什么更改为"English"与936不同的语言环境时,它仍不能显示?有趣? …

c++ console locale mbcs visual-c++

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

无法将CStringW转换为CStringA

我工作的一个项目,我已经在转换的一个问题stucked CStringWCStringA像日语多字节字符串.

我正在使用LoadString()Method 从字符串资源加载字符串.我尝试过以下代码,但似乎没有用.

CStringW csTest;
csTest.LoadString(JAPANESE_STRING);
CStringA Msg = CStringA(csTest); // Msg has been returned blank string
Run Code Online (Sandbox Code Playgroud)

std::string Msg = CW2A(csTest);// Msg has been returned blank string
Run Code Online (Sandbox Code Playgroud)

我也试过 wcstombs()了.

任何人都可以告诉我如何转换CStringWCString?提前致谢.

c++ string mfc cstring mbcs

4
推荐指数
1
解决办法
5493
查看次数

在Windows 8.1上使用Django的manage.py runserver出错

我无法在任何地方找到这个exitcode,但希望你们中的一个可以帮助我或让我知道这是否是python/Django中的错误.

无论如何,首先是这里的堆栈跟踪:

    Traceback (most recent call last):
  File "C:\Sitezooi\SiteTest\manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 385, in execute_from_command_line
    utility.execute()
  File "C:\Program Files\Python\lib\site-packages\django\core\management\__init_
_.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\base.py
", line 338, in execute
    output = self.handle(*args, **options)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 83, in handle
    self.run(*args, **options)
  File "C:\Program Files\Python\lib\site-packages\django\core\management\command
s\runserver.py", line 92, in run
    autoreload.main(self.inner_run, args, options)
  File "C:\Program Files\Python\lib\site-packages\django\utils\autoreload.py", l
ine …
Run Code Online (Sandbox Code Playgroud)

python windows django mbcs

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

什么多字节字符集以0x7F开头并且长度为4个字节?

我正在尝试使用一些遗留代码来正确显示中文字符.我尝试使用的一个字符编码以0x7F开头,长度为4个字节(包括0x7F字节).有谁知道这是什么样的编码以及我可以在哪里找到它的信息?谢谢..

更新:我还必须使用一些日语编码,它以0xE3开始每个字符并且长度为3个字节.如果我在Windows中选择日语语言环境,它会在我的计算机上正确显示,但是它在我们的应用程序中无法正确显示.但是,如果选择了除日语之外的任何其他语言环境,我甚至无法正确查看文件名.所以我猜这个编码不是Unicode.有人知道这是什么吗?是ANSI吗?它是Shift JIS吗?

对于中文版,我用Unicode和UTF-8字符进行了测试,我得到了相同的模式; 0x7F后跟三个字节.Unicode和UTF-8是一样的吗?

encoding mbcs

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

将字符转换为UTF-8的逻辑

我有以下代码,代码中的注释表示它将任何大于7FUTF-8的字符转换为.我对此代码有以下问题:

if((const unsigned char)c > 0x7F)
  {
    Buffer[0] = 0xC0 | ((unsigned char)c >> 6);
    Buffer[1] = 0x80 | ((unsigned char)c & 0x3F);
    return Buffer;
  }
Run Code Online (Sandbox Code Playgroud)
  1. 这段代码是如何工作的?
  2. 我正在使用的当前Windows代码页是否对放置的字符有影响Buffer

c c++ utf-8 character-encoding mbcs

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