相关疑难解决方法(0)

UTF8 与宽字符?

我似乎在思考某事时遇到了一些麻烦。我正在尝试创建一个 C++ 函数来将 UTF8 转换为 Wide。我开始使用谷歌搜索并找到 Boost 和 ICU(两者看起来都太大了)。然后我找到了 utf-cpp 头库,看起来不错。我是通过这里的一些线程发现的。

然后我阅读了该线程并找到了/sf/answers/430886711/

但是这两个函数如何将 UTF32 字符串转换为宽字符?它似乎只是UTF32到UTF8。我在 utf-cpp 标头文档中找不到任何对宽字符的提及...

无论如何,是否有任何类型的库可以将 UTF8/16/32 转换为 Wide 和反向?我正在查看http://src.chromium.org/svn/trunk/src/base/utf_string_conversions.cc,它似乎使用 ICU,但它也有 18 个头文件。

有什么帮助吗?也许今天只是我的头坏了。

编辑:重读后这是两个问题......我真的想知道有一个漂亮的小库(如utf-cpp标头)来处理宽字符和unicode。

c++ unicode

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

用unicode文件名打开

我必须使用一个接受文件名作为字符串(const char*)的库。在内部使用来打开文件fopen。有没有办法使该库接受Unicode文件名?在将Unicode名称传递给库之前,可以使用WideCharToMultiByte将Unicode名称转换为utf吗?

一种可能的(不希望的)解决方案是更改库接口(char* -> wchar_t*)并替换fopen为特定于Windows的_wopen。另一种解决方案是使用创建文件的符号链接并将其传递到库,但这仅限于NTFS卷。

windows winapi visual-c++

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

寻找将UTF8转换为UTF16的算法的描述

我有 3 个字节表示以 utf8 编码的 unicode 字符。例如,我有E2 82 AC(UTF8) 表示 unicode char \xe2\x82\xac (U+20AC)。他们有什么算法可以进行这种转换吗?我知道它们是 Windows api MultiByteToWideChar 但我想知道它们是否是 E2 82 AC 和 U+20AC 之间的简单数学关系。utf8 -> utf16 之间的映射是一个简单的数学函数还是一个硬编码的映射。

\n

c++ delphi unicode utf-8 utf-16

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

将UTF-16转换为UTF-8

我目前正在使用VC++ 2008 MFC.由于PostgreSQL不支持UTF-16(Windows用于Unicode的编码),我需要在存储之前将字符串从UTF-16转换为UTF-8.

这是我的代码片段.

// demo.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "demo.h"
#include "Utils.h"
#include <iostream>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    // initialize MFC and print and error on failure
    if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: …
Run Code Online (Sandbox Code Playgroud)

c++ windows unicode winapi utf

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

Windows UTF8到UTF16

我一直在尝试使用C++在BOM和UTF16 LE之间进行转换,以便在Windows上正确输出字符,而无需更改终端的字体.

我尝试更改代码页,但它们不起作用.

我有2个问题,

  1. 如何将普通字符串转换为宽字符串?
  2. 创建一个将每个unicode字符映射到Windows代码页中的字符的C++映射是不是一个坏主意?

例如,

wcout << L"\u00A0" << endl;
Run Code Online (Sandbox Code Playgroud)

á当使用代码页850时,此代码在Windows上输出该字母.如何在Windows上将变量替换"\u00A0"为将普通字符串转换为宽字符?

我想要的是这个:

wcout << Lsome_variable << endl;
Run Code Online (Sandbox Code Playgroud)

我意识到这不是有效的c ++语法,但有谁知道我怎么做到这一点?或者,如果有更好的方法?

c++ windows unicode utf-8

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

HttpSendRequest - POST 数据不支持 Unicode

我正在制作一个 C++ 代理,它将使用 HttpSendRequest() 将信息(例如系统主机名)发送回中央服务器。我希望它发回的信息之一是操作系统。我创建了以下函数来获取系统主机名。

wstring getOS()
{
     HKEY key;
     RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_QUERY_VALUE, &key); // Obtains Registry handle

     DWORD type;
     wchar_t buffer[MAX_PATH]; // MAX_PATH = 260 - The system hostname should never exceed this value
     DWORD size = sizeof(buffer);
     RegQueryValueEx(key, L"ProductName", NULL, &type, (LPBYTE)&buffer, &size); // Queries Registry key - stores value in "buffer"
     wstring os(buffer); // Converts from C-style character array to wstring
     return os; // Returns wstring to caller
}
Run Code Online (Sandbox Code Playgroud)

该函数将使用注册表获取操作系统并将其存储为 wstring。然后,我想将返回的“os”wstring 传递给以下 post() 函数,但我注意到您必须使用字符串而不是 HTTP …

c++ unicode

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

如何将C++ wstring UTF-8字符打印到Mac OS或Unix终端?

我该如何打印std::wstring使用std::wcout

我尝试以下,这是推荐这里,但它仅适用于印刷本¡Hola!,但不是这个??:

#include <iostream>
#include <clocale>

int main(int argc, char* argv[])
{
  char* locale = setlocale(LC_ALL, ""); 
  std::cout << "locale: " << locale << std::endl; // "C" for me
  std::locale lollocale(locale);
  setlocale(LC_ALL, locale); 
  std::wcout.imbue(lollocale);
  std::wcout << L"¡Hola!" << std::endl; // ok
  std::wcout << L"??" << std::endl;    // empty :(
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下(这里推荐)也不打印日文字符:

#include <stdio.h>
#include <string>
#include <locale>
#include <iostream>

using namespace std;

int main()
{

        std::locale::global(std::locale("")); …
Run Code Online (Sandbox Code Playgroud)

c++ unicode macos

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

无符号整数作为UTF-8值

假设我有

uint32_t a(3084);
Run Code Online (Sandbox Code Playgroud)

我想创建一个存储unicode字符的字符串,U+3084这意味着我应该取值a并将其用作UTF8表/字符集中正确字符的坐标.

现在,显然std::to_string()对我不起作用,标准中有很多函数在数值和char之间进行转换,我找不到任何给我UTF8支持和输出的东西std::string.

我想问一下我是否必须从头开始创建这个函数,或者C++ 11标准中有一些东西可以帮助我; 请注意我的编译器(gcc/g ++ 4.8.1)不提供完整的支持codecvt.

c++ unicode utf-8 c++11

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

如何将文本从CP437编码转换为UTF8编码?

在Windows中,öCP437字符集中的Unicode字符(带小写字母的拉丁文小写字母o)的值为148

在Linux中,öUTF-8编码的字节值是:

-61(Hi Byte) 
-74(Lo Byte)
(unsigned value = 46787)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何148在Linux上的C ++中从CP437 转换为UTF-8?

我的问题的详细信息位于:

Linux中带有扩展字符(128-255)的open()函数返回-1错误

临时解决方案: C ++ 11支持使用以下命令转换为UTF-8:codecvt_utf8

c++ unicode utf-8

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

标签 统计

c++ ×8

unicode ×8

utf-8 ×4

windows ×3

winapi ×2

c++11 ×1

delphi ×1

macos ×1

utf ×1

utf-16 ×1

visual-c++ ×1