最近对特殊字符处理比较头疼,请各位教我。 例如,®字符我想在textbox输入框中显示,结果不行,显示?想将这个字符写道txt文件中,也不行,怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Private Sub Form_Load()Me.Text1.Text = "@"End Sub这样挺正常啊。 VB6确实不行,一些宽字符无法处理,建议换vb.net 好像用strconv方法可以解决,tiger_zhao好像知道 本帖最后由 bcrun 于 2011-10-31 08:13:57 编辑 用 Microsoft Forms 2.0 Object Library 空间中的 TextBox 控件能解决你的问题。 你可以看看我的这篇文章,里面有几个函数,可以了解到字符串处理的一些知识,另外再给你看看几个例子,应该可以帮你具体了解字符串处理方面的方法。以下例子虽然是C++写的,不过也大同小异://----------------------------------------------------------------------------------------------------// Function Name: LenB(W/A)// Return Value: (BOOL) - return string byte size.// Description : Account string byte size.//----------------------------------------------------------------------------------------------------// LenB unicode editionDWORD LenBW(LPWSTR lpExpression) //{ DWORD i = 0; if(lpExpression==NULL) return 0; try{ while(lpExpression[i]!=0) { i++; } i=i*2; }catch(...){ i = 0; } return i;}// LenB ascii editionDWORD LenBA(LPSTR lpExpression) //{ DWORD i = 0; if(lpExpression==NULL) return 0; try{ while(lpExpression[i]!=0) { i++; } }catch(...){ i = 0; } return i;}//----------------------------------------------------------------------------------------------------// Function Name: Len(W/A)// Return Value: (BOOL) - return string's word count.// Description : Account string's word count.//----------------------------------------------------------------------------------------------------// Len unicode editionDWORD LenW(LPWSTR lpExpression) //{ DWORD i = 0; if(lpExpression==NULL) return 0; try{ while(lpExpression[i]!=0) { i++; } }catch(...){ i = 0; } return i;}// Len ascii editionDWORD LenA(LPSTR lpExpression) //{ DWORD i = 0; DWORD WordCount = 0; if(lpExpression==NULL) return 0; try{ while(lpExpression[i]!=0) { if((BYTE)lpExpression[i]>=0xA0){ WordCount++; i++; if(lpExpression[i]==0){ WordCount--; break; } }else WordCount++; i++; } }catch(...){ WordCount = 0; } return WordCount;}//----------------------------------------------------------------------------------------------------// Function Name: InStrB(W/A)// Return Value: (DWORD) - // Description : //----------------------------------------------------------------------------------------------------// InStrB unicode editionDWORD InStrBW(DWORD dwStart, // LPWSTR lpString1, // LPWSTR lpString2) //{ DWORD i = 0; DWORD j = 0; DWORD isret = 0; DWORD PrimaryLenB = LenW(lpString1); DWORD FindLenB = LenW(lpString2); for(i=dwStart;i<PrimaryLenB;i++){ isret=1; for(j=0;j<FindLenB;j++){ if(lpString1[i+j]!=lpString2[j]){ isret=0; break; } } if(isret==1){ i=i*2; return i; break; } } return 0;}// InStrB ascii editionDWORD InStrBA(DWORD dwStart, // LPSTR lpString1, // LPSTR lpString2) //{ DWORD i = 0; DWORD j = 0; DWORD isret = 0; DWORD PrimaryLenB = LenB(lpString1); DWORD FindLenB = LenB(lpString2); for(i=dwStart;i<PrimaryLenB;i++){ isret=1; for(j=0;j<FindLenB;j++){ if(lpString1[i+j]!=lpString2[j]){ isret=0; break; } } if(isret==1){ return i; break; } } return 0;}//----------------------------------------------------------------------------------------------------// Function Name: InStr(W/A)// Return Value: (DWORD) - // Description : //----------------------------------------------------------------------------------------------------// InStr unicode editionDWORD InStrW(DWORD dwStart, // LPWSTR lpString1, // LPWSTR lpString2) //{ DWORD i = 0; DWORD j = 0; DWORD isret = 0; DWORD PrimaryLenB = LenW(lpString1); DWORD FindLenB = LenW(lpString2); for(i=dwStart;i<PrimaryLenB;i++){ isret=1; for(j=0;j<FindLenB;j++){ if(lpString1[i+j]!=lpString2[j]){ isret=0; break; } } if(isret==1){ return i; break; } } return 0;}// InStr ascii editionDWORD InStrA(DWORD dwStart, // LPSTR lpString1, // LPSTR lpString2) //{ DWORD i = 0; DWORD j = 0; DWORD isret = 0; DWORD PrimaryLenB = LenB(lpString1); DWORD FindLenB = LenB(lpString2); DWORD WordCount = 0; DWORD IsStart = 0; for(i=0;i<PrimaryLenB;i++){ if(dwStart==WordCount){ IsStart = 1; } if(IsStart==1){ isret=1; for(j=0;j<FindLenB;j++){ if(lpString1[i+j]!=lpString2[j]){ isret=0; break; } } if(isret==1){ WordCount++; return WordCount; break; } } WordCount++; if((BYTE)lpString1[i]>=0xA0){ //属于中文字符 i++; } } return 0;}//----------------------------------------------------------------------------------------------------// Function Name: Left(W/A)// Return Value: (LPWSTR) - // Description : //----------------------------------------------------------------------------------------------------// Left unicode editionLPWSTR LeftW(LPWSTR lpString, // DWORD dwLength) //{ DWORD PrimaryLen = LenW(lpString); if(dwLength>PrimaryLen) return NULL; WCHAR *tmpValue; tmpValue = (WCHAR *)GlobalAlloc(GMEM_ZEROINIT, dwLength*sizeof(WCHAR) + sizeof(WCHAR)); for(DWORD i=0;i<dwLength;i++){ tmpValue[i]=lpString[i]; } tmpValue[dwLength] = 0; return tmpValue;}// Left ascii editionLPSTR LeftA(LPSTR lpString, // DWORD dwLength) //{ char *tmpValue; DWORD i; DWORD dwTextCount; DWORD dwByteCount; DWORD PrimaryLen = Len(lpString); DWORD PrimaryLenB = LenB(lpString); DWORD dwNewLenB; if(dwLength>PrimaryLen) return NULL; // 先数要提取的 ASCII 字符所占用的字节数 dwTextCount = 0; dwByteCount = 0; for(i=0;dwTextCount<dwLength;i++){ dwTextCount++; dwByteCount++; if((BYTE)lpString[i]>=0xA0){ // 中文字符 dwByteCount++; i++; } } // 开始提取字符数据 dwNewLenB = dwByteCount; tmpValue = (char *)GlobalAlloc(GMEM_ZEROINIT, dwNewLenB + 1); for(i=0;i<dwNewLenB;i++){ tmpValue[i] = lpString[i]; } tmpValue[dwNewLenB] = 0; return tmpValue;} LPSTR Unicode2Ascii(LPWSTR lpString){ #define HIHALF(B) ((BYTE)(((BYTE)(B) & 0xF0) >> 4)) #define LOHALF(B) ((BYTE)((BYTE)(B) & 0x0F)) #define TOTEXT(c) ((BYTE)((c) < 0x0A ? (c) + 0x30 : (c) + 0x37)) DWORD length = LenW(lpString); char *pAscii = new char [length * 4 + 2]; char *pRet = pAscii; for (DWORD i = 0; i < length; i++) { *pAscii++ = TOTEXT(HIHALF(HIBYTE(lpString[i]))); *pAscii++ = TOTEXT(LOHALF(HIBYTE(lpString[i]))); *pAscii++ = TOTEXT(HIHALF(LOBYTE(lpString[i]))); *pAscii++ = TOTEXT(LOHALF(LOBYTE(lpString[i]))); } *pAscii++ = 0x1a; *pAscii = '\0'; return pRet;}// Mid unicode editionLPWSTR MidW(LPWSTR lpString, // DWORD dwStart, // DWORD dwLength) //{ DWORD PrimaryLen = LenW(lpString); DWORD ReadCount = 0; WCHAR *tmpValue; if(dwStart+dwLength>PrimaryLen) return NULL; tmpValue = (WCHAR *)GlobalAlloc(GMEM_ZEROINIT, dwLength*sizeof(WCHAR)+sizeof(WCHAR)); for(DWORD i=dwStart;i<dwStart+dwLength;i++){ tmpValue[ReadCount]=lpString[i]; ReadCount++; } tmpValue[dwLength]=0; return tmpValue;}// Mid ascii editionLPSTR MidA(LPSTR lpString, // DWORD dwStart, // DWORD dwLength) //{ DWORD PrimaryLen = LenA(lpString); DWORD PrimaryLenB = LenBA(lpString); DWORD ReadCount = 0; DWORD ReadSize = 0; char *tmpValue; if(dwStart+dwLength>PrimaryLen) return NULL; tmpValue = (char *)GlobalAlloc(GMEM_ZEROINIT, dwLength*sizeof(WCHAR)+sizeof(char)); for(DWORD i=0;i<PrimaryLenB;i++){ ReadCount++; if(ReadCount>=dwStart+dwLength){ break; } if((BYTE)lpString[i]>=0xA0){ // 中文内容,两个字节一个字 if(ReadCount>=dwStart){ tmpValue[ReadSize]=lpString[i]; ReadSize++; i++; tmpValue[ReadSize]=lpString[i]; ReadSize++; }else{ i++; } }else{ // 普通 ASCII 码内容,单字节一个字 if(ReadCount>=dwStart){ tmpValue[ReadSize]=lpString[i]; ReadSize++; } } } tmpValue[ReadSize]=0; PrimaryLenB = GlobalSize((HGLOBAL)tmpValue); GlobalReAlloc((HGLOBAL)tmpValue,ReadSize+1,GMEM_MOVEABLE); PrimaryLenB = GlobalSize((HGLOBAL)tmpValue); return tmpValue;} vb 怎么把汉字转换成gbk编码呢? 招聘VB程序員多名(深圳) 沒分了,還是要問,求COM學習資料,學習C#的沒搞過com,謝謝 怎样屏蔽输入法帮助? 各位大虾,vb中随机生成8位数字,该怎么实现啊 菜鸟问题,高手帮个忙:) 一个还不错的编程站点,内容很多哦!~~~~~~~~~~ 那里可以找到vb控件方面的书籍? 高分求一源程序,关于库存管理系统 请教一个多线程问题 在菜单的Click事件获得菜单名 如何通过句柄取得当前对像是否为当前显示(激活)
Private Sub Form_Load()
Me.Text1.Text = "@"
End Sub这样挺正常啊。
几个例子,应该可以帮你具体了解字符串处理方面的方法。
以下例子虽然是C++写的,不过也大同小异://----------------------------------------------------------------------------------------------------
// Function Name: LenB(W/A)
// Return Value: (BOOL) - return string byte size.
// Description : Account string byte size.
//----------------------------------------------------------------------------------------------------
// LenB unicode edition
DWORD LenBW(LPWSTR lpExpression) //
{
DWORD i = 0;
if(lpExpression==NULL)
return 0;
try{
while(lpExpression[i]!=0)
{
i++;
}
i=i*2; }catch(...){
i = 0;
}
return i;
}// LenB ascii edition
DWORD LenBA(LPSTR lpExpression) //
{
DWORD i = 0;
if(lpExpression==NULL)
return 0;
try{
while(lpExpression[i]!=0)
{
i++;
}
}catch(...){
i = 0;
}
return i;
}//----------------------------------------------------------------------------------------------------
// Function Name: Len(W/A)
// Return Value: (BOOL) - return string's word count.
// Description : Account string's word count.
//----------------------------------------------------------------------------------------------------
// Len unicode edition
DWORD LenW(LPWSTR lpExpression) //
{
DWORD i = 0;
if(lpExpression==NULL)
return 0;
try{
while(lpExpression[i]!=0)
{
i++;
}
}catch(...){
i = 0;
}
return i;
}
// Len ascii edition
DWORD LenA(LPSTR lpExpression) //
{
DWORD i = 0;
DWORD WordCount = 0;
if(lpExpression==NULL)
return 0;
try{
while(lpExpression[i]!=0)
{
if((BYTE)lpExpression[i]>=0xA0){
WordCount++;
i++;
if(lpExpression[i]==0){
WordCount--;
break;
}
}else
WordCount++;
i++;
}
}catch(...){
WordCount = 0;
}
return WordCount;
}//----------------------------------------------------------------------------------------------------
// Function Name: InStrB(W/A)
// Return Value: (DWORD) -
// Description :
//----------------------------------------------------------------------------------------------------
// InStrB unicode edition
DWORD InStrBW(DWORD dwStart, //
LPWSTR lpString1, //
LPWSTR lpString2) //
{
DWORD i = 0;
DWORD j = 0;
DWORD isret = 0;
DWORD PrimaryLenB = LenW(lpString1);
DWORD FindLenB = LenW(lpString2); for(i=dwStart;i<PrimaryLenB;i++){
isret=1;
for(j=0;j<FindLenB;j++){
if(lpString1[i+j]!=lpString2[j]){
isret=0;
break;
}
}
if(isret==1){
i=i*2;
return i;
break;
}
}
return 0;
}
// InStrB ascii edition
DWORD InStrBA(DWORD dwStart, //
LPSTR lpString1, //
LPSTR lpString2) //
{
DWORD i = 0;
DWORD j = 0;
DWORD isret = 0;
DWORD PrimaryLenB = LenB(lpString1);
DWORD FindLenB = LenB(lpString2); for(i=dwStart;i<PrimaryLenB;i++){
isret=1;
for(j=0;j<FindLenB;j++){
if(lpString1[i+j]!=lpString2[j]){
isret=0;
break;
}
}
if(isret==1){
return i;
break;
}
}
return 0;
}//----------------------------------------------------------------------------------------------------
// Function Name: InStr(W/A)
// Return Value: (DWORD) -
// Description :
//----------------------------------------------------------------------------------------------------
// InStr unicode edition
DWORD InStrW(DWORD dwStart, //
LPWSTR lpString1, //
LPWSTR lpString2) //
{
DWORD i = 0;
DWORD j = 0;
DWORD isret = 0;
DWORD PrimaryLenB = LenW(lpString1);
DWORD FindLenB = LenW(lpString2); for(i=dwStart;i<PrimaryLenB;i++){
isret=1;
for(j=0;j<FindLenB;j++){
if(lpString1[i+j]!=lpString2[j]){
isret=0;
break;
}
}
if(isret==1){
return i;
break;
}
}
return 0;
}
// InStr ascii edition
DWORD InStrA(DWORD dwStart, //
LPSTR lpString1, //
LPSTR lpString2) //
{
DWORD i = 0;
DWORD j = 0;
DWORD isret = 0;
DWORD PrimaryLenB = LenB(lpString1);
DWORD FindLenB = LenB(lpString2);
DWORD WordCount = 0;
DWORD IsStart = 0; for(i=0;i<PrimaryLenB;i++){
if(dwStart==WordCount){
IsStart = 1;
}
if(IsStart==1){
isret=1;
for(j=0;j<FindLenB;j++){
if(lpString1[i+j]!=lpString2[j]){
isret=0;
break;
}
}
if(isret==1){
WordCount++;
return WordCount;
break;
}
}
WordCount++;
if((BYTE)lpString1[i]>=0xA0){
//属于中文字符
i++;
}
}
return 0;
}//----------------------------------------------------------------------------------------------------
// Function Name: Left(W/A)
// Return Value: (LPWSTR) -
// Description :
//----------------------------------------------------------------------------------------------------
// Left unicode edition
LPWSTR LeftW(LPWSTR lpString, //
DWORD dwLength) //
{
DWORD PrimaryLen = LenW(lpString);
if(dwLength>PrimaryLen)
return NULL;
WCHAR *tmpValue;
tmpValue = (WCHAR *)GlobalAlloc(GMEM_ZEROINIT, dwLength*sizeof(WCHAR) + sizeof(WCHAR));
for(DWORD i=0;i<dwLength;i++){
tmpValue[i]=lpString[i];
}
tmpValue[dwLength] = 0;
return tmpValue;
}
// Left ascii edition
LPSTR LeftA(LPSTR lpString, //
DWORD dwLength) //
{
char *tmpValue;
DWORD i;
DWORD dwTextCount;
DWORD dwByteCount;
DWORD PrimaryLen = Len(lpString);
DWORD PrimaryLenB = LenB(lpString);
DWORD dwNewLenB; if(dwLength>PrimaryLen)
return NULL; // 先数要提取的 ASCII 字符所占用的字节数
dwTextCount = 0;
dwByteCount = 0;
for(i=0;dwTextCount<dwLength;i++){
dwTextCount++;
dwByteCount++;
if((BYTE)lpString[i]>=0xA0){
// 中文字符
dwByteCount++;
i++;
}
}
// 开始提取字符数据
dwNewLenB = dwByteCount;
tmpValue = (char *)GlobalAlloc(GMEM_ZEROINIT, dwNewLenB + 1);
for(i=0;i<dwNewLenB;i++){
tmpValue[i] = lpString[i];
}
tmpValue[dwNewLenB] = 0;
return tmpValue;
}
LPSTR Unicode2Ascii(LPWSTR lpString)
{
#define HIHALF(B) ((BYTE)(((BYTE)(B) & 0xF0) >> 4))
#define LOHALF(B) ((BYTE)((BYTE)(B) & 0x0F))
#define TOTEXT(c) ((BYTE)((c) < 0x0A ? (c) + 0x30 : (c) + 0x37)) DWORD length = LenW(lpString);
char *pAscii = new char [length * 4 + 2];
char *pRet = pAscii; for (DWORD i = 0; i < length; i++)
{
*pAscii++ = TOTEXT(HIHALF(HIBYTE(lpString[i])));
*pAscii++ = TOTEXT(LOHALF(HIBYTE(lpString[i])));
*pAscii++ = TOTEXT(HIHALF(LOBYTE(lpString[i])));
*pAscii++ = TOTEXT(LOHALF(LOBYTE(lpString[i])));
} *pAscii++ = 0x1a;
*pAscii = '\0'; return pRet;
}
// Mid unicode edition
LPWSTR MidW(LPWSTR lpString, //
DWORD dwStart, //
DWORD dwLength) //
{
DWORD PrimaryLen = LenW(lpString);
DWORD ReadCount = 0;
WCHAR *tmpValue; if(dwStart+dwLength>PrimaryLen)
return NULL; tmpValue = (WCHAR *)GlobalAlloc(GMEM_ZEROINIT, dwLength*sizeof(WCHAR)+sizeof(WCHAR));
for(DWORD i=dwStart;i<dwStart+dwLength;i++){
tmpValue[ReadCount]=lpString[i];
ReadCount++;
}
tmpValue[dwLength]=0;
return tmpValue;
}
// Mid ascii edition
LPSTR MidA(LPSTR lpString, //
DWORD dwStart, //
DWORD dwLength) //
{
DWORD PrimaryLen = LenA(lpString);
DWORD PrimaryLenB = LenBA(lpString);
DWORD ReadCount = 0;
DWORD ReadSize = 0;
char *tmpValue; if(dwStart+dwLength>PrimaryLen)
return NULL; tmpValue = (char *)GlobalAlloc(GMEM_ZEROINIT, dwLength*sizeof(WCHAR)+sizeof(char));
for(DWORD i=0;i<PrimaryLenB;i++){
ReadCount++;
if(ReadCount>=dwStart+dwLength){
break;
}
if((BYTE)lpString[i]>=0xA0){
// 中文内容,两个字节一个字
if(ReadCount>=dwStart){
tmpValue[ReadSize]=lpString[i];
ReadSize++;
i++;
tmpValue[ReadSize]=lpString[i];
ReadSize++;
}else{
i++;
}
}else{
// 普通 ASCII 码内容,单字节一个字
if(ReadCount>=dwStart){
tmpValue[ReadSize]=lpString[i];
ReadSize++;
}
}
}
tmpValue[ReadSize]=0;
PrimaryLenB = GlobalSize((HGLOBAL)tmpValue);
GlobalReAlloc((HGLOBAL)tmpValue,ReadSize+1,GMEM_MOVEABLE);
PrimaryLenB = GlobalSize((HGLOBAL)tmpValue);
return tmpValue;
}