一. 首先你的歌曲名是从哪获取的,如果是从MP3 Tag中读取的,应该会读取到编码。GB18030,UTF8?等等
二. CD1.mp3是正常的,然后“CD1我.mp3”就异常了。可能是你输出语句不支持uft编码,或者你的串口工具不支持,可以使用“teraterm-4.97.exe”工具试试。
三. 建议将“CD1我.mp3”使用%x方式输出,看看,反推一下。
问题一:请参考上述2。
问题二:如果有中文,就不可能使用ascii,毕竟ascii只有256个,不包括中文。
想要发送中文给MCU,就要约定中文编码,比如uft8,或者gb2312。
CD1我.mp3 的 uft8编码 43.44.31.E6.88.91.2E.6D.70.33
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct GetFileNameEvtTag {
char *name; //USB 歌曲名(utf8 格式)
int num; //曲目号
} GetFileNameEvt;
char *DeleteUTF8(const char *name)
{
char *tempName = NULL;
unsigned int Trgloop = 0;
if(NULL != name)
{
tempName = (char *)malloc(strlen(name));
printf(" DeleteUTF8 name [%s] len [%d] \n",name,strlen(name));
if(NULL != tempName)
{
while((*name) != 0x00)
{
if(((*name) < 128) && ((*name) > 0))
{
printf(" %x \n",(*name));
memcpy(tempName+Trgloop,name,0x01);
Trgloop++;
}
name++;
}
memset(tempName+Trgloop,0x00,0x01);
}
}
return tempName;
}
int main (void)
{
char *TrgName = NULL;
//test code start
GetFileNameEvt pe;
char testname[50] = "cd你ccc我.mp3";
pe.name = (char *)malloc(50);
memset(pe.name,0x00,50);
memcpy(pe.name,testname,strlen(testname));
//test code end
TrgName = DeleteUTF8(pe.name);
char name_len = (char)strlen(TrgName);
printf(" song name [%s] len [%d] \n",TrgName,name_len);
return 0;
}