非Unicode工程读取Unicode文件

MyUnicodeReader.h

#pragma once
/************************************************************************/
/* 在“多字节字符集”属性的工程中读取Unicode文件
** -----------------------------------注意-------------------------------------------------------
** -------------一定要确保读取的文件是标准的Unicode文件,即文件头两个字节是0xFFFE---------*/
/************************************************************************/
class MyUnicodeReader
{
public:
    MyUnicodeReader(void);
    ~MyUnicodeReader(void);
    FILE* file;
    bool Open(CString filePath);
    void Close();
    //按行读取
    bool ReadString(CString &s);
};

MyUnicodeReader.cpp

#include "StdAfx.h"
#include "MyUnicodeReader.h"
#include <locale.h>
#include <string>

MyUnicodeReader::MyUnicodeReader(void)
{
}

MyUnicodeReader::~MyUnicodeReader(void)
{
}

bool MyUnicodeReader::Open( CString filePath )
{
    file=fopen(filePath, "rb");
    //Unicode文件开始前两个字节应该是FFFE
    fseek(file, 2, SEEK_SET);
    return file!=NULL;
}

void MyUnicodeReader::Close()
{
    fclose(file);
}

const int MAX_CHAR_NUM=1024;
bool MyUnicodeReader::ReadString( CString &s )
{
    wchar_t buf[MAX_CHAR_NUM];
    if (fgetws(buf, MAX_CHAR_NUM, file)==NULL) return false;
    size_t convertedChars = 0;
    char dst[MAX_CHAR_NUM];
    setlocale(LC_CTYPE,"chs");// 处理汉字
    wcstombs_s(&convertedChars, dst, MAX_CHAR_NUM, buf, MAX_CHAR_NUM);
    s=dst;
    return true;
}
时间: 2024-11-10 23:52:57

非Unicode工程读取Unicode文件的相关文章

Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法

在Windows下用文本编辑器创建的文本文件,如果选择以UTF-8等Unicode格式保存,会在文件头(第一个字符)加入一个BOM标识. 这个标识在Java读取文件的时候,不会被去掉,而且String.trim()也无法删除.如果用readLine()读取第一行存进String里面,这个String的length会比看到的大1,而且第一个字符就是这个BOM. 这种情况会造成一些麻烦,比如在读取ini文件的时候,如果想判断第一行是不是以"["开头就无法正确判断. 幸好,Java在读取Un

登录shell与非登录shell读取文件过程

登录shell与非登录shell读取文件过程登录:/etc/profile→/etc/profile.d/*.sh        ~/.bash_profile非登录:~/.bash_profile→~/.basfrc→/etc/bashrc#soure .bash_profile        手动更新/etc/profile            通用的有效环境变量/etc/profile.d/*.sh    软件包特有的环境变量~/.bash_profile        用户特有的环境变

ASCII与Unicode编码消息写文件浅析

[文章摘要] ASCII与Unicode是两种常见的字符编码.它们的表示方法不一样,因而在程序中就要区别处理. 本文基于作者的实际开发经验,对ASCII与Unicode两种字符编码消息的写文件过程进行了详细的分析,为相关软件开发工作的开展提供了有益的参考. [关键词] ASCII  Unicode  C语言  编码  开发 一.ASCII与Unicode编码简介 1. ASCII编码简介 ASCII是一套基于拉丁字母的电脑编码系统.它使用指定的7位或8位二进制数的组合来表示128或256 种可能

Selenium+Python参数化:读取TXT文件

概述 从Selenium模块化一文中,可以看出参数化的必要性,本文来介绍下读取外部txt文件的方法. 如何打开文件 打开文件有以下两个函数可以应用: 1.open(file_name,access_mode) file_name: 文件路径及名称: access_mode :访问方式,具体参数如下,,未提供参数,则默认为r: r:表示读取: w:表示写入: a:表示添加: +: 表示读写: b:表示2进制访问; 2.file函数 file()内建函数它的功能等于open(),如下根据文档说明可知

用程序读取CSV文件的方法

CSV全称 Comma Separated values,是一种用来存储数据的纯文本文件格式,通常用于电子表格或数据库软件.用Excel或者Numbers都可以导出CSV格式的数据. CSV文件的规则 0 开头是不留空,以行为单位.1 可含或不含列名,含列名则居文件第一行. 2 一行数据不垮行,无空行. 3 以半角符号,作分隔符,列为空也要表达其存在. 4 列内容如存在,,则用""包含起来. 5 列内容如存在""则用""""包

java 从jar包中读取资源文件

在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java.io.*; public class Resource { public  void getResource() throws IOException{ File fil

(转)java 从jar包中读取资源文件

(转)java 从jar包中读取资源文件 博客分类: java 源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件(比如图片,音乐,文本等等),在集成环境(Eclipse)中运行的时候没有问题.但当打包成一个可执行的jar包(将资源文件一并打包)以后,这些资源文件找不到,如下代码:Java代码 [java] view plaincopy //源代码1: package edu.hxraid; import java

python 读取utf8文件

有时候默认是gbk编码,但是要读取utf8文件,所以会出现decode 错误. 使用codecs模块: import codecs file = codecs.open('filename','r',encoding='utf-8') 使用这个读取带有汉字的文件,如果是汉字,会整个读取进来,而不是按字节读取.读进来会自动转换成unicode.

java读取.properties文件乱码

1.config.properties文件写不进中文,写进去都变成了unicode,解决办法是右键该文件--Properties--Resource--Text file encoding ,选other,我将other改为了UTF-8,这样可以写进去中文,但是读取时又变成乱码了. 2,解决读取乱码: String content = new String(PropertiesConfig.getProperty("mail.content").getBytes("ISO88