- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个用多字节字符集编译的项目。当 msg1 包含日语字符时,下面的转换将失败。
bool MyClass::UnfoldEnvelope(BSTR msg1)
{
CW2A msg(msg1);
LPCTSTR p0 = msg;
....
}
在入口处,msg1 是一个 BSTR,它包含 unicode 字符并具有日文路径名。转换 CW2A 似乎起作用,因为在调用之后,msg 包含可识别的日语字符串。但是,LPCTSTR 分配失败。在该行之后,p0 包含垃圾。字符串 p0 随后在我不愿触及的旧代码中使用。
在这种情况下,获取指向字符串“msg”的指针的正确方法是什么?
在英语中一切正常。
最佳答案
尝试使用WideCharToMultiByte
! CP_ACP 是将宽字符串转换为当前 Windows 语言的单字节字符串(在日文 Windows 上可能是日文,CW2A 同理)。如果您的 Windows 不是日文,但您有日文字符,您应该使用 CP_UTF8 (UTF-8) 并在使用(显示、打印或用作文件名)时将文本传输回 UTF-16 (wchar_t)。要转换回来,你应该使用 MultiByteToWideChar
功能。
需要说明的是:ANSI 多字节代码只是整个 Unicode 的一个子集。 Windows 使用与您的 Windows 位置相同的子集(您可以在 Control Panel 中配置它)。如果您有一个真正的 Unicode 字符串或不是基于区域设置的字符串,您应该保留所有 Unicode 字符。如果您想使用单字节字符串和 Unicode,您应该将 wchar_t
字符串(所有 Windows 宽字符都是 UTF-16)转换为 UTF-8 Unicode 字符串。
检查此来源:
bool MyClass::UnfoldEnvelope(BSTR msg1)
{
// Get the necessary space for single byte string
int new_size = WideCharToMultiByte( CP_UTF8, 0, msg1, -1, NULL, NULL, NULL, NULL );
if ( new_size <= 0 )
return false;
// Use vector to C functions
vector<char> p0(new_size);
// Convert the string
if ( WideCharToMultiByte( CP_UTF8, 0, msg1, -1, &p0[0], new_size, NULL, NULL ) <= 0 )
{
return false;
}
// use string as a usual single byte string (save, load etc.)
....
// get the string size in UTF-16
new_size = MultiByteToWideChar( CP_UTF8, 0, &p0[0], -1, NULL, NULL );
if ( new_size <= 0 )
return false;
// Use vector to C functions
vector<wchar_t> p1w(new_size);
// convert back to UTF-16
if ( MultiByteToWideChar( CP_UTF8, 0, &p0[0], -1, &p1w[0], new_size ) <= 0 )
return false;
...
// use your Unicode string as a file name
return ( CopyFileW( L"old_file", &p1w[0], TRUE ) != FALSE );
}
关于c++ - 日语系统上的字符转换不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9267705/
我正在尝试在日本网站上的 flash 动态文本字段上实现抗锯齿。这些文本字段的内容不是固定数据。 我没有嵌入字体的选项,因为嵌入所有字符会导致非常重的 swf 文件(3000kb+ 仅用于字体)。这是
我正在创建一个游戏。我有一些带有文本的用户界面。最近我们想添加日语版本,但我遇到字体问题。我使用 stb_freetype 来光栅化字体,并且我支持 Unicode,所以这应该不是问题。但大多数字体似
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
我知道我的问题已经在这里有了解决方案。但我只想具体说明我的情况。我有一个 json 对象,其中包含非英语字符。 例如。 {“my_chinise_name”:“吉米”}。 该对象将通过 javascr
我刚刚安装了 Tesseract OCR 并在运行命令 $ tesseract --list-langs 后输出仅显示 2 种语言,eng和osd 。我的问题是,如何加载另一种语言,在我的例子中是日语
在哪里可以获得与日语汉字、平假名和片假名字符对应的 ASCII 代码列表。我正在做一个java函数和Javascript来确定它是否是日语字符。它的 ASCII 码范围是多少? 最佳答案 ASCII代
在我的 Rails 应用程序中,我有一个像这样的文本字段 @disabled_field %> 我正在使用 jQuery 来验证此文本字段仅接受 half width katakana字符(Unic
我有在表单中添加网站选项的功能。 用户可以在这里写域/url,这个域/url 可以是英语也可以是日语,如下所示。 www.google.com www.南极星.com I am using follo
我遇到了日语问题。我有一个允许用户搜索数据的表格。当用户输入要搜索的字符串并按下“Enter”键时,搜索功能就会执行。我的代码是: $('#formSearch input').keyup(funct
我是 Java 脚本的新手。我写了一个正则表达式,它允许用户名或电子邮件地址作为某些条件的输入,例如应接受 6-50 个字符不允许空格或空白不应允许 2 个 @ 符号并且可以接受超过 1 个 .(点)
您好,我有一个包含日语文本的文件,保存为 unicode 文件。 我需要从文件中读取信息并将信息显示到标准输出。 我正在使用 Visual Studio 2008 int main() {
我正在使用在 http://mobile.tutsplus.com/tutorials/android/android-sdk-using-the-text-to-speech-engine/ 中找到
(我正在开发一个网站来抓取 ASP.NET 中的其他网站内容。我能够正确获取内容,但如何根据该内容识别使用的是哪种语言。例如英语、印地语、中文, 日语等 我使用了以下代码。 HttpWebReques
在 TextBox 中,我无法捕获具有特殊 IME 的语言(例如日语和韩语)的击键,因为 IME 不断地决定不同的字符或音节。实际上,大多数情况下 KeyUp/KeyDown 都不会触发(如果 IME
我有一个包含日语单词的数据库。我很困惑,因为这个查询: SELECT japanese FROM my_table where japanese = 'する' 返回两个结果: ずる する 我试图查看
我想将 CSV 文件解析为 JSON 文件。我已经解析了它,但它没有得到日语字符。 我正在使用 Papa Parser 将 CSV 解析为 JSON。 这是我的代码:- Papa.parse("htt
我有一个 C# winform 应用程序,它安装在日文 windows 7 上。一些标签以非常宽的字体显示,导致它们无法匹配 from 的大小。 经过一些研究,我被告知这可能是半角/全角问题。有没有办
MySql 全文搜索是否适用于非拉丁语言? (希伯来语、阿拉伯语、日语……) 添加:做了一些测试...希伯来语有一些问题。示例:名称 מוסəנזון 的发音与 מושəנזון 相同,但搜索不会找到
我使用下一个代码从句柄为 hFile 的文件中读取所有元素行得通,而且我用 GetFileSize(hFile, NULL) 得到了它的大小. _TCHAR* text = (_TCHAR*)mall
验证按预期进行,但消息仅以英语显示良好。我使用自己的日语消息。 问题是我收到了日语的乱码验证消息。我将validation-api-1.0.0.GA.jar与hibernate-validator-4
我是一名优秀的程序员,十分优秀!