读取ANSI文件存入UNICODE编码的CString——“Ansi转UNICODE”及“UNICODE转Ansi”

本文介绍了在MFC应用中如何处理Ansi编码到UNICODE编码的转换问题。通过示例代码,演示了如何将Ansi编码的文本文件读入UNICODE的CString,以及将UNICODE编码的CString转换回Ansi编码。此外,还提供了用于标签替换工具的源码片段。
摘要由CSDN通过智能技术生成

最近在用MFC写一个小的工具,从一个读取一个带特殊标签的文件并将里面的标签替换成对应的数据,然后写入另一个生成文件里。由于输入输出文件是Ansi编码的,程序当中CString类存储格式却是UNICODE编码的,所以不得不解决编码转换的问题。

Ansi转UNICODE

这个部分需要调用MutibyteToWideChar函数,参考 http://msdn.microsoft.com/en-us/library/bb202786.aspx
不过有人已经写了可靠的转换函数,建议直接使用下面的这两个函数:
/***************************/
/* ansi-unicode conversion */
/***************************/

BOOL AnsiToUnicode16(CHAR *in_Src, WCHAR *out_Dst, INT in_MaxLen)
{
    /* locals */
    INT lv_Len;

  // do NOT decrease maxlen for the eos
  if (in_MaxLen <= 0)
    return FALSE;

  // let windows find out the meaning of ansi
  // - the SrcLen=-1 triggers MBTWC to add a eos to Dst and fails if MaxLen is too small.
  // - if SrcLen is specified then no eos is added
  // - if (SrcLen+1) is specified then the eos IS added
  lv_Len = MultiByteToWideChar(CP_ACP, 0, in_Src, -1, out_Dst, in_MaxLen);

  // validate
  if (lv_Len < 0)
    lv_Len = 0;

  // ensure eos, watch out for a full buffersize
  // - if the buffer is full without an eos then clear the output like MBTWC does
  //   in case of too small outputbuffer
  // - unfortunately there is no way to let MBTWC return shortened strings,
  //   if the outputbuffer is too small then it fails completely
  if (lv_Len < in_MaxLen)
    out_Dst[lv_Len] = 0;
  else if (out_Dst[in_MaxLen-1])
    out_Dst[0] = 0;

  // done
  return TRUE;
}


BOOL AnsiToUnicode16L(CHAR *in_Src, INT in_SrcLen, WCHAR *out_Dst, INT in_MaxLen)
{
    /* locals */
    INT lv_Len;


  // do NOT decrease maxlen for the eos
  if (in_MaxLen <= 0)
    return FALSE;

  // let windows find out the meaning of ansi
  // - the S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值