帮我把这封乱码邮件转换一下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帮我把这封乱码邮件转换一下相关的知识,希望对你有一定的参考价值。

发给别人的,邮件很长,人家看不了,我也懒得重新写,帮忙转化一下了

姘 锛?lt;/DIV>
板勾蹇 涔 锛?lt;/DIV>
杩 骞翠 锛 涓 瀹 寰 蹇 э 澶т汉浠 绘 颁 娓 搴 锛 骞达 楗 锛 锛 锛 浠 灏 瀛╁ 灏辫交 惧 浜 锛 璧拌蛋浜叉 棰 棰 宀 憋 剧 夸 绫荤 锛 涓 杩 浜 骞村氨 板凡缁 涓 娆四 骞翠 锛 浠 骞村 濮 瑙 寰 杩 骞存 涓 绉 涔 ★ 杩 剧 戒 娆 浜 锛 绘 澶ф ╋ ℃ 涓 锛 琚 浜 澹板 甸 ?lt;/DIV>
涓 娴风 婕 浜 锛 d х ~ 甯 轰 讳 娴风 锛 ㄤ 娴蜂 涓 瀛 锛 杩 娆〃 瀛 浼 锛 浠 浠 璁茶堪涓 娴风 绉 绉 锛 濂姐 ?lt;/DIV>
扮 涔 濂斤 澶╋ 涓 瀵癸 ?锛?4 凤 堕 存 涔 杩 寰 杩 涔 蹇 锛 浠 涔 芥病 灏辫 疯 讳 10澶╀ 锛 澶╁ 锛 2锛?4 凤 浠 楂 涓 瀛 10涓 浜哄 绘 浜 锛 浜鸿 锛 涓 杩 涓 杩 涓 锛 宸э 缁 缁 轰 堕 达 涓轰 憋 杩 涓 浜 涓 锛 浠 璺 绘 澶 猴 涓 ? 瑰ぇ瀹舵 寰 婊 鸿刀锛 扮 璺 浜 涓ゅ 舵 跺樊锛 锛 寮 濮 圭撼 凤 涓 昏 藉 浠 涔 锛 蹇 浜 浜哄 跺 婊 恒 寰 寰 涓 锛?8 憋 涓 椤胯 ╁ 涓ゅ 剁 婊 灞辨 澶╃ 剁 锛 澶╃ 剁 锛 婊 垮 瀛 ユ 锛 浠ュ 浠 ユ病 婊 杩 锛 瀛 浠 涓 涓 涓 缁 璁茬 楠 锛 璇村揩 跺 涓 瑕 纭 匡 涓 朵 楠ㄦ 锛 杩 ㄤ 瑕 棰 缁 绀鸿 濂姐 婊 纭 锛 甯 涓 村 板 胯 锛 璁╀汉 ㄥ 颁 璧拌捣 ュ 灏 夸 涓 浼 楠ㄦ 锛 涓 杩 ユ 涓 瑗垮 舵 寰 淇¤ 锛 锛 涓 靛 舵 ヨ揣锛 娌℃ 锛 浠 浠 涓 瑗挎 ュ氨寰 濂界 锛 涔 灏辨 灏 锛 灏辩 ラ 婊 涓 涓 昏 瀹 涓 棰 锛
瀹 淇〃 棰 跺 婊 绠 锛 绔 ㄥ ′ 浜鸿韩浣 撅 宸卞氨婊 涓 讳 锛 涓 涔 涓 浼 锛 瑕 婊 10绫筹 椋 灏卞 煎 肩 ㄨ 宠竟浣 锛 瑙 寰 宸辫 绠 涓 峰 蹭 讳 锛 搴 濂藉揩 锛 灏变 濂藉 虫 锛 杩 涓 浼 锛 浜 灏变富 ㄦ 杈逛 涓 姝 锛 浜 ~~~ d釜婊 洪 垮害澶ф 200绫冲 э 灏遍 d 浜 璧锋 ワ ョ 婊 ~~~2涓 灏 讹 婊 浜? 宸茬 绱 寰 涓 峰 锛 娴 韬 娌〃 蹭 版 浠 风 璇存 浜 锛 娌℃ 杩 缁 涓 杩 eぉ 濂藉 蹇 ~
锛 骞村揩杩 瀹 浜 锛 瑕 瀛 ′ 锛 涓 冲 伙 2 涔 藉 ?8澶╁ 锛 瑕 ?1澶╄ ユ 澶 濂藉 锛 绘 瑙 寰 跺 椋 锛 浠 涔 芥病 堕 村氨 娴 璧颁 浣 涓 澶у 跺 涓 涔 杩 涔 瑙 寰 锛?amp;nbsp;

参考技术A 没有邮件原文无法转换,把邮件原文转来,我试下。 参考技术B xj3@qq.com 参考技术C 邮件乱码巧破译 来源:《新潮电子》
----
相信许多网友都遇到过乱码邮件,一些奇奇怪怪的字符,不知道是什么意思。产生乱码邮件的最
主要原因在于传输机制不同或邮件的编码不同,如果能够识别这些编码,就可以找到破解的办法。
邮件乱码巧破译
一、E-mail编码标准
>>>>由于一个汉字是用两个扩展ASCII码表示,对DOS、Windows及Unix系统来说,所有英文字母及符号
都是用ASCII码来代表,ASCII码只用到每个字节的前7位。而一些电脑系统在通信时不使用8-bit
clean传输方式,无法处理8位的数据或硬把8位数据当作7位来处理,数据就会被破坏。对电子邮件来
说,有时候一个邮件在送达收信人的过程中,会经过很多台主机的转接传输服务,这中间的主机假如
有一台不具备8-bit clean的传输条件,中文邮件可能就会被破坏。因此,不论是发送中文文本文件,
还是发送EXE可执行文件、图形文件或压缩文件等二进制文件,都应该先进行编码。
E-mail编码主要有:
1.UU编码
>>>>在早期传送非 ASCII码的文件时,最常用的便是这种UU(Unix-to-Unix encoding)编码方式。
Uuencode和Uudecode分别是Unix系统中使用的UU编码和解码程序,后来被改写成为在DOS中亦可执行的
程序。
2.MIME编码
>>>>UU编码解决了E-mail传送非ASCII文件的问题,但这种方式并不方便。因而又发展出一种新的编码
标准MIME(Multipurpose Internet Mail Extentions),一般译作“多媒体邮件传送模式”。顾名思
义,它可以传送多媒体文件,在一封电子邮件中附加各种格式文件一起送出。
>>>>MIME定义两种编码方式:Base64与QP(Quote-Printable)。QP的规则是对于资料中的7位无须重复编
码,仅将8位的数据转成7位。 QP编码适用于非ASCII码的文字内容,例如我们的中文文件。而Base64
的编码规则,是将整个文件重新编码成7位,通常用于传送二进制文件。编码的方式不同会影响编码之
后的文件大?gt;>6�哂?nbsp;MIME功能的E-mail软件大都能自动判别你的邮件是采用何种编码,然后自动选
择用QP或Base64来解码。
>>>>MIME标准现已成为Internet电子邮件的主流。现在最常使用的电子邮件软件Eudora、FoxMail、
Netscape Mail、Outlook Express和Internet Mail等都支持MIME编码标准。
3.Binhex编码
>>>>Binhex的编码方式常用于Mac机器。一般PC上的电子邮件软件,亦多数支持MIME的规格,很少有支
持Binhex格式的。在常用的电子邮件软件中,只有Eudora具有这种功能,可直接解读Binhex的编码。
二、邮件乱码的原因及解决方法
>>>>汉字邮件出现乱码的原因很多,主要的原因是Internet上的某些邮件主机不支持8位(非ASCII码
格式)传输,以及不同的邮件编码,不同设置的电子邮件接收软件,不同语种的操作系统等。
>>>>当你收到一封乱码的邮件时,应根据邮件内容中的关键字符,判别其编码方法。不同的乱码,在
不同的平台上有不同的解决方法,因此解码前必须先看一下文件的内容,根据特征对文件可能的编码
方式(Uuencode、Base64 encode、QP-encode或其它编码方式)进行判断。
1.Uuencode“乱码”
>>>>Uuencode编码主要来自Unix环境的使用者,目前使用者已经很少。这种软件内部所用的算法为
base64。其格式与Base64 encode格式非常相似,它们的差别仅仅在于“信头”部分的不同。Uuencode
“乱码”大体格式为:
begin 0600 index.gb
MH;ZQOL2_PKS#O]3"N/S0PM*[M,ZAOPJCJ,G/U,+2U,"TM<30PM3VN_*XQ+:O
……
end
>>>>在乱码前面含有“begin xxx”,后面紧接着编码之前原始文件的名称。接着是已经Uuencode编码
的邮件的内容。在乱码内容后面,即最后一行为“end”。
>>>>如果你的电子邮件接收程序不支持UU解码,那么你看到的就是这些Uuencode“乱码”。
>>>>解决Uuencode“乱码”的办法:
方玌uencode“乱码”邮件转寄到自己的邮箱中,再使用能够支持UU解码的电子邮件接收程序(如
Eudora、OutLook Express等)来接收该邮件。
吠ü�艏�褰?Uuencode“乱码”存入文本文件,改文件名后缀为 UUE,然后使用Winzip 解码。
方?Uuencode“乱码”存入一个文件,然后在DOS下用uudecode.exe程序将文件解码。
方?Uuencode“乱码”存入一个文件,然后在Windows下用Wincode解码。
Wincode除支持UU编码外也支持MIME、Binhex等编码格式,应用范围颇为广泛。
2.Base64 encode“乱码”
>>>>Base64是MIME标准编码之一。Base64 encode编码方式是将3个字节(8位)用4个字节(6位)表
示,由于编码后的内容是6位的,因此可以避免第8位被截掉。Base64 encode“乱码”大体格式为:
MIME-Version:1.0
Content-Type:text/plain; charset="us-ascii〃
Content-Transfer-Encoding:base64
Status:R
yrE68shis+o/IMTcsrvE3Ljmy9/L47YEzajRtrX-Y1re6zbYnu7Chow0LDQo=3d
>>>>在Base64编码邮件的乱码前一般有如下几部分“信头”:Content-Type(内容类型)、charset(字符
集)及Content-Transfer-Encoding(内容传输编码方式)。
>>>>如果你的电子邮件接收程序不支持Base64解码,那么你看到的就是这些Base64 encode“乱码”。
>>>>解决Base64 encode“乱码”的办法:
方獴ase64 encode“乱码”邮件存成一个文本文件,改文件名后缀为.UUE,然后使用 Winzip 解码。
方獴ase64 encode“乱码”邮件存成一个文件,将文件后缀改为.EML,由OutLook Express 打开,就
可以自动解码。
3.QP-encode“乱码”
>>>>QP-encode是MIME标准编码之一。QP-encode编码全名为“Quoted-Printable
Content-Transfer-Encoding”。由于用这种格式表示的信息,其内容主要都是 ASCII字符集中可以打
印的字符,因此名称中含有 printable。QP编码的方式,是将一个字节用两个16进制数值表示,然后
在前面加“=”。QP-encode“乱码”大体格式为:
=d2=bc=b3=b8=d5=db=c4=c4=bc=d2=b5=f6=b1=e5=c9=e7=b6=f8=b0
>>>>采用QP(Quoted-Printable)编码方式的邮件很容易进行判别,因为它的内容通常有很多等号“
=”,因此不需要看“信头”也可以判断是否为QP编码。
>>>>如果你的电子邮件接收程序不支持QP解码,那么你看到的就是这些QP-encode“乱码”。
>>>>解决QP-encode“乱码”的办法:
方妙P-encode“乱码”邮件转寄到自己的邮箱中,然后用支持QP解码的电子邮件接收程序(如
Netscape mail、Eudora、OutLook Express、Becky等)来接收该邮件。
肥褂?Winzip 对 Quoted-Printable 解码。必须注意:(1)在邮件信头中检查、添加这样两
行:Mime-Version: 1.0Content-Transfer-Encoding: quoted-printable;(2) 信头中间不要空行,信
头和信体之间要有一个空行。这样形成的文件,改后缀名为UUE,即可双击启动 Winzip 得到解码。
4.HZ中文乱码
>>>>由于网友们可能使用不同的电子邮件收发软件,因此,来自各个网友的邮件内容可能包含着看不
懂的乱码,例如,如果看到下面这串乱码,你一定看不懂它的意思:
HZ- 学软艋�}躏艋用软艋�}躏艋买软艋�暮冒槁?
>>>>实际上这是一串“简体中文HZ”编码,如果使用Outlook Express发送邮件时,选用HZ编码,而邮
件的接收者使用Eudora来阅读邮件,看到的就是这些乱码。正确的方法是,在撰写邮件窗口中,选择
“格式”菜单下的“语言”命令,并选中“简体中文(GB2312)”项,然后发送邮件。
>>>>这时,如果你使用Outlook Express,可以打开“查看”菜单点击“语言”选项中的“简体中文
(GB2312)”项,或者点击工具栏上“语言”后面的向下箭头,选择“简体中文(GB2312)”功能项,屏
幕出现一个对话框,单击“是”按钮,所有邮件主题中含有指定字符集的邮件应用新的字符集。
>>>>如果你使用Eudora之类的软件,可以使用“南极星”之类的软件,自动转换不同的汉字编码。如
果还看不到的话,可将这些编码文本,拷贝到一个文本编辑器中。对于上面那串编码,你将看到下面
的内容:
“学软件、用软件、买软件的好伴侣”
5.“半个汉字”乱码
>>>>汉字的另一个问题是所谓的“半个汉字”乱码。如果看到下面这串乱码,你一定看不懂它的意思:
>>>>“把砑�⒂萌砑�⒙蛉砑�暮冒槁隆薄* ”
>>>>由于很多英文编辑软件以字符为单位来处理文本,汉字被删除一半后,剩余的部分会和相邻的汉
字重新组合,使得文本面目全非。因此,除了在输入、删除的时候注意这种问题外,还要注意不要在
英文字处理软件中轻易使用“字符替换”功能,这往往会把一个汉字的后一个字符和相邻汉字的前一
个字符当成一个汉字被替换掉。
>>>>对于“半个汉字”乱码,只要将“乱码”邮件存成一个文本文件,然后使用以字符为单位的编辑
软件,将“乱码”行的首字符删除,后面的部分就会和相邻的“乱码”重新组合成可识别的汉字。
>>>>如果上述方法不能奏效,那么只好告诉对方正确的发送方式,请对方重新发一份邮件给你。如果
你看到的不是上述编码,那么请到 [url]http://123.chn.net[/url]查看“乱码大全”一文。

帮我把 C++ 结构转换成 C#

【中文标题】帮我把 C++ 结构转换成 C#【英文标题】:Help me convert C++ structure into C# 【发布时间】:2010-02-08 19:12:53 【问题描述】:

我对 C# 完全陌生,需要帮助将 C++ 结构转换为 C#。 C++结构如下:

#define QUE_ADDR_BUF_LENGTH 50
#define QUE_POST_BUF_LENGTH 11

typedef struct
    
    const WCHAR *streetAddress;
    const WCHAR *city;
    const WCHAR *state;
    const WCHAR *country;
    const WCHAR *postalCode;
 QueSelectAddressType;

typedef struct
    
    WCHAR   streetAddress[QUE_ADDR_BUF_LENGTH + 1];
    WCHAR   city[QUE_ADDR_BUF_LENGTH + 1];
    WCHAR   state[QUE_ADDR_BUF_LENGTH + 1];
    WCHAR   country[QUE_ADDR_BUF_LENGTH + 1];
    WCHAR   postalCode[QUE_POST_BUF_LENGTH + 1];
     QueAddressType;

我无法更改 C++ 结构,因为它们是由我尝试与之交互的 API 定义的。任何帮助将不胜感激。

编辑: 这里有更多信息,我试图调用的 dll 中的函数声明如下:

#ifdef QUEAPI_EXPORTS
#define QueAPIExport __declspec(dllexport)
#elif defined QUEAPI_SERVER
#define QueAPIExport
#else
#define QueAPIExport __declspec(dllimport)
#endif

#ifdef __cplusplus
extern "C" 
#endif

typedef uint32 QuePointHandle;

QueAPIExport QueErrT16 QueCreatePointFromAddress
    (
    QueSelectAddressType*   addr,   // in:  Address data to search on.
    QuePointHandle*         point   // out: Handle to selected point. Must be closed with QueClosePoint.
    );

这是我定义 DllImport 的方式:

[DllImport("QueAPI.DLL", EntryPoint = "QueCreatePointFromAddress")]
public static unsafe extern QueTypesnConst.QueErrT16 QueCreatePointFromAddress(QueTypesnConst.QueSelectAddressType *address, uint *point);

编辑2: 以下代码块是该问题的解决方案: 对于结构:

[StructLayout(LayoutKind.Sequential)]
public struct QueSelectAddressType

    [MarshalAsAttribute(UnmanagedType.LPWStr)]
    public string streetAddress;
    [MarshalAsAttribute(UnmanagedType.LPWStr)]
    public string city;
    [MarshalAsAttribute(UnmanagedType.LPWStr)]
    public string state;
    [MarshalAsAttribute(UnmanagedType.LPWStr)]
    public string country;
    [MarshalAsAttribute(UnmanagedType.LPWStr)]
    public string postalCode;
;

[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode)]
public struct QueAddressType

    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst=51)]
    public string streetAddress;
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 51)]
    public string city;
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 51)]
    public string state;
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 51)]
    public string country;
    [MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst = 12)]
    public string postalCode;
;

对于 DllImport:

[DllImport("QueAPI.DLL", EntryPoint = "QueCreatePointFromAddress")]
public static extern QueTypesnConst.QueErrT16 QueCreatePointFromAddress(ref QueTypesnConst.QueSelectAddressType address, ref uint point);

【问题讨论】:

你关心大小还是可以只使用字符串? 我相信尺寸很重要,但我不能确定 【参考方案1】:

试试下面的定义

public partial class NativeConstants 

    /// QUE_ADDR_BUF_LENGTH -> 50
    public const int QUE_ADDR_BUF_LENGTH = 50;

    /// QUE_POST_BUF_LENGTH -> 11
    public const int QUE_POST_BUF_LENGTH = 11;


[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct QueSelectAddressType 

    /// WCHAR*
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)]
    public string streetAddress;

    /// WCHAR*
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)]
    public string city;

    /// WCHAR*
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)]
    public string state;

    /// WCHAR*
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)]
    public string country;

    /// WCHAR*
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPWStr)]
    public string postalCode;


[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet=System.Runtime.InteropServices.CharSet.Unicode)]
public struct QueAddressType 

    /// WCHAR[51]
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=51)]
    public string streetAddress;

    /// WCHAR[51]
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=51)]
    public string city;

    /// WCHAR[51]
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=51)]
    public string state;

    /// WCHAR[51]
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=51)]
    public string country;

    /// WCHAR[12]
    [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=12)]
    public string postalCode;

【讨论】:

@JaredPar:您可能需要在属性中包含 SizeConst...即SizeConst = NativeConstants.QUE_ADDR_BUF_LENGTH @tommieb75,它确实在需要它的结构上包含 SizeConst 修饰符。由于代码非常长,您必须向右滚动 我已对原帖进行了编辑,这可能有助于确定答案。 这行得通。感谢您的帮助。我会用正确的解决方案更新帖子。【参考方案2】:
public struct QueSelectAddressType

    public readonly string StreetAddress;
    public readonly string City;
    public readonly string State;
    public readonly string Country;
    public readonly string PostalCode;

    public QueSelectAddressType(string street, string  city, string state, string country, string code)

    this.StreetAddress = street;
    this.City = city;
    this.State = state;
    this.Country = country;
    this.PostalCode = code;



public struct QueAddressType

    char[] streetAddress = new char[QUE_ADDR_BUF_LENGTH + 1];
    char[] city = new char[QUE_ADDR_BUF_LENGTH + 1];
    char[] state = new char[QUE_ADDR_BUF_LENGTH + 1];
    char[] country = new char[QUE_ADDR_BUF_LENGTH + 1];
    char[] postalCode = new char[QUE_POST_BUF_LENGTH + 1];

【讨论】:

@taylonr:我认为这行不通,因为您不能在结构中使用初始化程序... 不确定,MSDN (msdn.microsoft.com/en-us/library/aa288208(VS.71).aspx) 简单地说:结构不能具有以下形式的初始化程序:base(参数列表)。但我不这样做。授予 JaredPar 上面的那个更好......我认为他在我打字时提交了

以上是关于帮我把这封乱码邮件转换一下的主要内容,如果未能解决你的问题,请参考以下文章

哪位高手帮我把汇编语言程序转换成c语言程序啊?(对了是51单片机程序)

帮我把 C++ 结构转换成 C#

请英文高手帮我把这段翻译成中文,很有挑战性哦

谁能帮我把XML文件转换为XSD和XSL文件?

邮件内容经常出现乱码,用编码去转换也不行,如何解决?

哪位好心人能帮我把这段DNA序列转变成蛋白质序列?