`
JasonRight
  • 浏览: 72935 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

截取中文输入法输入的字符串,更改编码为ANSI

    博客分类:
  • c++
阅读更多
在全英文的XP中,在非unicode的程序中输入的中文会转为“??”。

通过截获WM_IME_COMPOSITION消息得到输入的字符串
ImmGetCompositionStringW得到Unicode
WideCharToMultiByte转换为ANSI

BOOL CchartestDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_IME_COMPOSITION)
	{
		HIMC hIMC;
		HWND hWnd=pMsg->hwnd;
		DWORD dwSize;
		WCHAR lpWideStr[20];

		hIMC = ImmGetContext(hWnd);

		dwSize = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0);

		dwSize += sizeof(WCHAR);

		memset(lpWideStr, 0, 20);

		//get string in Unicode
		ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, lpWideStr, dwSize);

		//transfer to ANSI code
		int   iSize;
		LPSTR   pszMultiByte;
		int ChineseSimpleAcp = 936;
		
		iSize = WideCharToMultiByte(ChineseSimpleAcp,0,lpWideStr,-1,NULL,0, NULL,NULL);

		pszMultiByte = new char[iSize+1]/**sizeof(char)*/;

		WideCharToMultiByte(ChineseSimpleAcp, 0, lpWideStr, -1,	pszMultiByte, iSize, NULL, NULL );

		CString strText = pszMultiByte;

		delete pszMultiByte;

		ImmReleaseContext(hWnd, hIMC);

		return TRUE;
	}
		
	return Default();	
}
分享到:
评论

相关推荐

    截取指定长度的字符串

    而在一些其他语言中,如Java,可能需要先将字符串转换为特定的字符编码(如UTF-8)再进行截取。 在实际应用中,我们可能还需要考虑一些边缘情况,例如当截取的长度超过了字符串的实际长度,这时通常会返回整个字符...

    java中截取带汉字的字符串

    1. **编码问题**:在处理包含中文字符的字符串时,确保整个程序使用了正确的字符编码(如UTF-8)。 2. **边界条件处理**:当字符串长度小于或等于指定的字节数时,需要特别处理,避免数组越界等异常。 3. **性能考虑...

    delphi 实现截取字符串中中文+英文混合截取

    在Delphi编程环境中,处理中文和英文混合的字符串截取是一项常见的任务,特别是在涉及到文本处理、数据解析或者用户界面展示时。由于Unicode编码的存在,中文字符通常占据两个字节,而英文字符则占据一个字节,这就...

    rf.rar_RF 字符串截取_Rf字符串比较_rf字符串切割

    在这个"rf.rar"压缩包中,我们看到涉及到RF字符串处理的三个关键知识点:RF字符串截取、RF字符串比较以及RF字符串切割。 1. RF字符串截取: 正则表达式提供了灵活的字符串截取方式。通过定义匹配模式,可以精确地...

    C语言实现字符串截取

    根据给定的信息,本文将详细解释两个用于C语言中字符串截取的方法:`subStringByIndex` 和 `subStringByPointer`。这两个函数都属于自定义实现,它们提供了灵活且实用的功能来帮助开发者轻松地从一个字符串中提取所...

    Delphi 字符串截取函数

    Delphi提供了丰富的字符串处理函数,其中包括了截取、拼接、删除、插入等功能,极大地简化了开发者的编码工作。本文将详细介绍Delphi中几种常用的字符串截取函数及其应用示例,帮助开发者更深入地理解和掌握这些功能...

    c#正则表达式截取指定字符串之间的字符串。类文件直接用就可以了~

    给写了2个方法,一个是直接截取单个需要的字符串,比如字符串string a="ab123456",我只需要提取3,那么就是单独截取就可以了,从2开始到4结束就行。 第二个是把所有的符合条件的字符串都截取出来,提取出来,比如...

    TIA博途-字符转换为字符串以及截取字符串有效字符的具体方法示例.docx

    在处理通信数据时,我们经常需要对字符和字符串进行操作,例如将字符转换为字符串,或者从字符串中截取有效字符。以下将详细介绍在TIA博途中如何实现这些操作。 首先,字符转换为字符串的过程通常涉及到ASCII码。...

    JavaScript截取中文字符串

    ### JavaScript截取中文字符串知识点详解 #### 一、引言 在进行文本处理时,我们经常需要对字符串进行截取操作。特别是在处理包含多种字符集(如英文与中文)的字符串时,考虑到不同字符编码长度的差异性,简单地...

    截取字符串

    在编程领域,字符串操作是一项基础且重要的任务,而“截取字符串”是其中的一个关键功能。这个小demo展示了如何在不同的编程环境中实现字符串截取,同时也涉及到字符串的空格处理。接下来,我们将深入探讨这两个主题...

    SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串

    SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串

    PHP中如何截取中文字符串

    总结,处理中文字符串截取时,理解字符编码和字符串处理函数的特性至关重要。PHP的mbstring扩展提供了强大且安全的方法来处理多字节字符,确保了中文字符串截取的准确性。在编写代码时,要时刻关注字符串的编码类型...

    bat截取字符串

    echo 去掉最后一个字符后的字符串为 %str:~0,-1% ``` 这里,`~0,-1` 表示从第0个字符开始,去掉末尾的一个字符。 #### 4. 截取指定位置后的所有字符 还可以截取指定位置之后的所有字符,例如: ```bat echo 从第四...

    如何用oracle 截取两个相同字符串之间的字符

    在实际工作中经常遇到截取两个相同字符串之间的字符的oracle问题,以下是相关语句

    C# 按照字节长度截取字符串

    总的来说,按照字节长度截取字符串需要考虑字符编码的影响,通过`Encoding`类处理字符串的字节表示,并结合正则表达式进行精确截取。在实际应用中,确保对字符串编码的理解和处理方式的正确性至关重要,以避免可能...

    C#字符串截取

    4. **结果转换**:将截取的字节数组重新转换为字符串返回。 ### 方法三:CutString - 英文和数字字符串的截取 此方法适用于英文和数字字符为主的字符串截取,不考虑多字节字符的情况。 #### 参数说明: - `str`:...

    截取特定部分字符串

    "截取特定部分字符串"这个话题涉及到字符串操作的基础知识,它包括查找字符串的开始位置、结束位置,然后提取这两个位置之间的子字符串。在这个场景下,我们可能会用到`substring()`方法或其他相关函数来实现这一...

    字符串按照指定的字节数来截取

    在IT行业中,字符串处理是一项基础且重要的任务,尤其是在编程领域。字符串是由字符组成的...但要注意,字节截取可能会涉及到字符编码问题,因此在实际操作时要特别留意编码格式,避免出现乱码或者截取不完整的情况。

    java编写一个截取字符串的函数,输入为一个字符串和字节数.docx

    例如,如果输入字符串为 `"我 ABC"`,并且指定截取 4 个字节,则输出为 `"我 AB"`,而不是 `"我 AB"` 中的半个汉字。 SplitString 类 在本例中,我们定义了一个 `SplitString` 类,该类具有两个成员变量 `SplitStr...

    C++中英混合字符串截取

    总之,处理中英混合字符串,特别是涉及中文截取时,需要理解字符编码,尤其是Unicode的工作原理,以及如何在不同编码间进行转换。通过适当的方法,我们可以确保截取的字符串保持完整性和可读性,避免在处理多语言...

Global site tag (gtag.js) - Google Analytics