`
helloyesyes
  • 浏览: 1322752 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Unicode字符串转换成ASCII码字符串的问题

 
阅读更多

关于介绍Unicode字符串转换成ASCII码字符串的方法的网页很多了,下面是一个完成转化的函数:

char * UnicodeToASCII(UCHAR * buf)
{
wchar_t* pwszUnicode = (wchar_t *) buf;
int iSize;
char* pszMultiByte;

iSize = WideCharToMultiByte(CP_ACP, 0, pwszUnicode, -1, NULL, 0, NULL, NULL);
pszMultiByte = (char*)malloc((iSize+1)/**sizeof(char)*/);
WideCharToMultiByte(CP_ACP, 0, pwszUnicode, -1, pszMultiByte, iSize, NULL, NULL);

return(pszMultiByte);
}

我在读取NTFS格式文件系统中记录的文件名数据时,转化出来总是这样的效果:

Unicode代码 ---- > “testfile.txt??”

后面总是多两个问号,有的文件名转化出来多的怪字符则更多。分析以后发现出现这个问题的原因是调用UnicodeToASCII函数时的参数buf中的问题。

buf用来保存读取到的Unicode串,由于读到的Unicode串只有“testfile.txt”对应的代码数据,并没有Unicode串结束的标志。因此Unicode串转换时总是多转化了数据。可以这样做来解决上面的问题:

1) 申请buf空间时大小为Unicode串Size + 2;

2) buf[size] = '\0';

buf[size + 1] = '\0';

我实验了一下,只赋值一个“\0”似乎不行。

不当处请指正!

分享到:
评论

相关推荐

    c#字符串转换ascII码2

    在C#编程语言中,字符串转换为ASCII码是一项常见的任务,尤其在处理字符编码和数据传输时。ASCII(美国标准信息交换代码)是一种基于拉丁字母的一套电脑编码系统,最初设计用于7位二进制数表示,共包含128个字符。在...

    C# ASCII码和字符串互转

    以上就是关于C#中ASCII码和字符串相互转换的基本操作和注意事项。理解这些概念和方法对于编写处理字符编码的C#代码至关重要。在实际项目中,确保正确处理字符编码能避免很多不必要的问题,尤其是在处理多语言或跨...

    VB 字符和ASCII码间的相互转换

    在实际编程中,理解字符和ASCII码的转换有助于处理字符串操作,比如解析文本数据、编码解码等任务。同时,了解Unicode编码对于处理多语言或非英文字符的项目至关重要。通过熟练运用这些函数,开发者可以在VB环境中更...

    字符串转ASCII ASCII转字符串

    当我们需要将一个字符串转换为ASCII值时,实际上我们是在为每个字符获取其对应的ASCII码。在大多数编程语言中,如Python,可以使用内建函数实现这一过程。例如,在Python中,`ord()` 函数用于获取单个字符的ASCII值...

    字符串转换ascII码(c#制作)

    在C#编程语言中,字符串转换为ASCII码是一项常见的任务,尤其在处理字符编码和数据传输时。ASCII(美国标准信息交换代码)是一种基于拉丁字母的一套电脑编码系统,最初设计为7位,能表示128个不同的字符。在这个过程...

    asp.net 字符与ascii码的转换

    - **Asc函数**:接受一个字符串参数,如果该字符串长度为1,则返回其对应的ASCII码;如果长度不是1,则抛出异常。 - **Chr函数**:接受一个整数参数(代表ASCII码),如果该整数在0至255之间,则返回对应的字符;...

    C语言字符串转换为Python字符串的方法

    C语言字符串转换为Python字符串的方法 C语言字符串转换为Python字符串是指将C语言中的字符串数据转换为Python中的字符串对象,以便在Python环境中使用。下面详细介绍了C语言字符串转换为Python字符串的方法。 使用...

    ANSI字符串与Unicode字符串的相互转换

    例如,从ANSI字符串转换为Unicode字符串时,需要知道源字符串的代码页,以便正确地解析多字节序列。反之,转换回ANSI时,也需要指定目标代码页。 3. **内存管理**:在转换过程中,需要分配足够的内存来存储目标字符...

    字符串转换工具

    这个名为"字符串转换工具"的应用程序,正如其标题所示,专注于ASCII码、字符串以及十六进制之间的转换。这样的工具在处理二进制数据、编程、网络通信或数据分析时非常有用。 首先,我们来了解一下ASCII码。ASCII...

    Go-Unicode文本的ASCII转换形式

    例如,可以使用`unidecode.Unidecode`函数将一个Unicode字符串转换为ASCII。 在实际应用中,这个库可以用于以下场景: 1. **文件名和路径处理**:在某些操作系统中,非ASCII字符在文件名或路径中可能会引起问题。`...

    中文转换成ASCII码Swing界面

    例如,百分号编码会将每个Unicode字符转换成"%xy"的形式,其中"xy"是该字符的16进制Unicode值。 开发者之所以创建这个工具,可能是因为在某些场景下,如网络传输、文件名或者编程中的字符串常量,只支持ASCII字符。...

    易语言汉字和ASCII码之间的转换

    每个ASCII字符对应一个唯一的数字,例如大写A的ASCII码是65,小写z的ASCII码是122。 汉字与ASCII码之间的转换通常涉及编码的解码和编码过程。在易语言中,我们可以使用内置的子程序来进行这些操作。"子程序1"可能是...

    Qt中的字符编码转换:UTF8、Unicode、GBK、ASCII、16进制字符、16进制数值

    但如果需要,可以使用`QString::toUtf8()`将Unicode字符串转换为UTF-8字节序列。 5. **16进制数值转换**:在串口通信中,可能需要将接收到的16进制数值转换为字符或字符串。例如,函数`QByteArray_to_HexQString`将...

    java 字符串转16进制Ascii

    因此,将字符串转换为16进制ASCII值意味着将每个字符的ASCII码转换为16进制形式。 以下是一个简单的Java方法,用于将字符串转换为16进制ASCII表示: ```java public static String strToHex(String input) { ...

    字符串十六进制转换工具(包含ANSI和UNICODE)

    本工具专注于ANSI和UNICODE字符串与十六进制之间的转换,这涉及到字符编码和二进制数据的理解。 首先,我们要理解ANSI和UNICODE的概念。ANSI字符串通常指的是基于特定地区或语言的ASCII编码,它使用7位或8位来表示...

    精选_Ring0内核层下字符串基础操作之Ansi与Unicode字符串类型互转_源码打包

    在进行Ansi和Unicode字符串转换时,Windows提供了API函数来帮助开发者实现这一过程。这些函数包括但不限于以下几种: 1. **MultiByteToWideChar**: 这个函数用于将Ansi字符串转换为Unicode字符串。它需要输入Ansi...

    ASCII UNICODE 字符转换

    在编程中,比如在Python中,可以使用`encode`函数将ASCII字符串转为UNICODE,反之,用`decode`函数将UNICODE转为ASCII。 在实际应用中,ASCII和UNICODE之间的转换可能会遇到一些问题。例如,ASCII只能表示有限的...

    Win32 下 Unicode-多字节字符串 转换工具

    1. `WideCharToMultiByte`:此函数将Unicode字符串转换为多字节字符串。它需要源Unicode字符串、编码页(决定多字节字符集)、转换选项以及其他参数,然后返回转换后的多字节字符串。 2. `MultiByteToWideChar`:与...

    ATL字符串转换宏

    2. `W2A`: Unicode字符串转换为ANSI字符串。 3. `A2CW`: ANSI字符串转换为宽字符LPCWSTR类型。 4. `W2CA`: Unicode字符串转换为ANSI LPCSTR类型。 5. `A2OLE`: ANSI字符串转换为OLE自动字符串(通常用于COM接口)。 ...

    获取ASCII码与字符串相互转换

    以上就是ASCII码与字符串转换的基础知识和实现方式,无论是在日常开发还是在特定场景的应用中,掌握这种转换都是十分重要的。通过熟悉不同编程语言的处理方式,可以更好地适应各种编程需求。在实际操作中,一定要...

Global site tag (gtag.js) - Google Analytics