【救急】邮件内码转换问题

Derekfan 2008-11-10 11:16:37
各位大侠,各位看官:
1、请问在邮件中的gb2312的编码格式如何能够在繁体中显示?
2、utf-8的编码格式能够从根据不同的系统进行自动的正确显示。
3、unicode是否在简繁体系统中正常显示呢?如何转码问题?

问题多多?希望大家给点建议!!!
...全文
174 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-11-12
  • 打赏
  • 举报
回复
两种多字节字符串相互转换需要先转成Unicode,再从Unicode转成目标字符集。
Derekfan 2008-11-12
  • 打赏
  • 举报
回复
谢谢 jeenyvenus
用户 昵称 2008-11-12
  • 打赏
  • 举报
回复
里面涉及了一个u2s函数,将ucs2的流转成ascii的。

char *
u2s( unsigned char *buf, unsigned short length, char *tmpbuf )
{
int i;
char *p;
char s[ 16 ] = "";
wchar_t wstr[ 1 ];
CString mstr;
int l, curlen;

*tmpbuf = 0;
curlen = 0;
mstr = _T( "" );

for( i = 0; i < ( int )length; i += 2 )
{
p = ( char * )wstr;
*p = *( buf + 1 ); //high
*( p + 1 ) = *buf; //low
mstr = wstr;
memset( s, 0, sizeof( s ) );
strcat( s, ( const char * )mstr );
if( *buf ) //if low is not 0
{
s[ 2 ] = 0;
l = 2;
}
else
{
s[ 1 ] = 0;
l = 1;
}

strcat( tmpbuf + curlen, ( const char * )s );
curlen += l;

buf += 2;
}

return tmpbuf;
}

用户 昵称 2008-11-12
  • 打赏
  • 举报
回复
关于utf8转ascii

char *
utf82ascii( unsigned char *utf8, unsigned short length, char *buf )
{
int i = 0;
unsigned short a;
unsigned char b;
char *p = buf;
unsigned char t[ 2 ];


do
{
if( 0xe0 == ( *utf8 & 0xf0 ) &&
0x80 == ( *( utf8 + 1 ) & 0xc0 ) &&
0x80 == ( *( utf8 + 2 ) & 0xc0 ) )
{
//3个字节
b = *utf8;
b &= 0x0f;
a = b;

a <<= 6;
b = *( utf8 + 1 );
b &= 0x3f;
a |= b;

a <<= 6;
b = *( utf8 + 2 );
b &= 0x3f;
a |= b;

t[ 0 ] = ( a >> 8 ) & 0xff;
t[ 1 ] = ( a & 0xff );
u2s( t, 2, p );

p += 2;

i += 3;
utf8 += 3;
}
else if ( 0xc0 == ( *utf8 & 0xe0 ) &&
0x80 == ( *( utf8 + 1 ) & 0xc0 ) )
{
//2个字节
b = *utf8;
b &= 0x1f;
a = b;

a <<= 6;
b = *( utf8 + 1 );
b &= 0x3f;
a |= b;

t[ 0 ] = ( a >> 8 ) & 0xff;
t[ 1 ] = ( a & 0xff );
u2s( t, 2, p );

p += 2;

i += 2;
utf8 += 2;
}
else
{
//1个字节
*( p++ ) = *( utf8++ );

i++;
}
} while ( i < length );
*p = 0;

return buf;
}

Derekfan 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 Amuro1987218 的回复:]
那是数据库存贮方面的问题吧,存入取出后2进制数据发生改变自然不行
[/Quote]
我在debug的时候在就已经看到的是乱码,问题好玄???

真不知道别人是怎么在繁体中显示简体的!!!
Derekfan 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 Amuro1987218 的回复:]
那是数据库存贮方面的问题吧,存入取出后2进制数据发生改变自然不行
[/Quote]
目前我使用的数据库是sqlite
Amuro1987218 2008-11-12
  • 打赏
  • 举报
回复
那是数据库存贮方面的问题吧,存入取出后2进制数据发生改变自然不行
yjgx007 2008-11-12
  • 打赏
  • 举报
回复
从utf8转到其它内码, 中间先转为unicode,再转向其它内码.
Derekfan 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 Amuro1987218 的回复:]
被你刚发来的死信弄晕了。
看来还是内码转换问题,我建议发送端文字转为unicode或是utf8,在阅读端直接用该编码查看。
[/Quote]
我转为utf-8码值后,存入数据库后,再从数据库中取出来,结果看到无法认识的乱码。
Derekfan 2008-11-12
  • 打赏
  • 举报
回复
目前在繁体系统的outlook中在接收邮件的时候我们也会看到在主题中部分字是无法显示的,但是为什么他的内容还是能够显示正常呢?
Amuro1987218 2008-11-12
  • 打赏
  • 举报
回复
被你刚发来的死信弄晕了。
看来还是内码转换问题,我建议发送端文字转为unicode或是utf8,在阅读端直接用该编码查看。
Derekfan 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 Amuro1987218 的回复:]
你说的是GB2312编码,繁体转换为简体?

LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, 繁体文字, -1, 简体文字, iLen);
[/Quote]
现在是遇到这样的事情,邮件含有简体字在简体系统中发到放到繁体系统中的时候,我先是使用gbk转为utf8,然后再使用utf8转为big5,结果发现很多字是无法显示的。如果我想简体字能够在繁体系统中正常显示的话,我应该要转为什么编码呢???
Amuro1987218 2008-11-12
  • 打赏
  • 举报
回复
你说的是GB2312编码,繁体转换为简体?

LCMapString(0x0804,LCMAP_SIMPLIFIED_CHINESE, 繁体文字, -1, 简体文字, iLen);
Derekfan 2008-11-12
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 cnzdgs 的回复:]
两种多字节字符串相互转换需要先转成Unicode,再从Unicode转成目标字符集。
[/Quote]
谢谢
Derekfan 2008-11-11
  • 打赏
  • 举报
回复
up
Derekfan 2008-11-10
  • 打赏
  • 举报
回复
各位老大你们能否说得清楚些呀?很茫然耶!
cnzdgs 2008-11-10
  • 打赏
  • 举报
回复
首先系统中要相应的字体。
试试SetThreadLocale。
Unicode是可以正常显示的,转码时只要给对codepage即可。
yjgx007 2008-11-10
  • 打赏
  • 举报
回复
用utf-8
用户 昵称 2008-11-10
  • 打赏
  • 举报
回复
通用的做法是都用unicode。
Derekfan 2008-11-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jennyvenus 的回复:]
int s2u(const char* pSrc, BYTE* pDst, int nSrcLength)
{
int nDstLen = 0;
int nOffset = nSrcLength;
int nTotal = 0;
WCHAR wchr[ 4096 ];

try
{
while( nOffset>0 )
{
nDstLen = ::MultiByteToWideChar(CP_ACP, 0, pSrc, nOffset, wchr, 4096);

////////////////////
我没做过纯unicode的程序,只是听大家说unicode版本的程序到哪里都一样。前面的代码是ascii转unicode的。

[/Quote]





謝謝你
加载更多回复(9)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧