问一个关于python文件保存为utf-8格式的问题

执着的大笨猪 2013-03-31 05:02:44
xp环境下 python2.7 源文件a.xml是utf-8格式,然后写入了中文字符.
但是a.xml的文件编码是ANSI的,但如果我写入英文则是UTF-8的
如何才能让它在输入中文的情况下a.xml是UTF-8的呢?

有大牛知道吗? 希望能给一个已经验证的实例!谢谢了,这困扰了我一个周末了
...全文
484 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
crifan 2013-03-31
  • 打赏
  • 举报
回复
“源文件a.xml是utf-8格式” 你指的是,xml声明的是utf-8吧? “然后写入了中文字符” 这个主要取决于,你写入的时候,是以什么方式写入的。 比如,用codes以utf-8打开xml,然后写入,则就是以utf-8的编码方式写入的; 直接file打开然后写入,则就是默认的,你的写入内容本身的编码的; “但是a.xml的文件编码是ANSI的,但如果我写入英文则是UTF-8的” 如果只是讨论英文字母,则由于UTF-8编码,是ANSI的超集, 使得,你写入普通英文,不论是ANSI还是UTF-8,结果都是ANSI,也可以看成是UTF-8. 注: 对于编码不了解的话,是没法彻底明白此处的关系的。 则需要好好去学习编码,再回来看你的这个问题,就全明白了。 可参考: 字符编码详解 “如何才能让它在输入中文的情况下a.xml是UTF-8的呢?” 先确保,本身a.xml这个文件,本身是UTF-8编码的 然后再通过Python的codecs,用UTF-8编码去打开该文件, 然后写入内容是,使用对应的UTF-8编码格式写入。即可。 拷贝了点,我之前的一些相关的代码,供你参考:
import codecs;

#------------------------------------------------------------------------------
# open output file name in rw mode, return file handler
def openOutputFile():
    global gVal;
    # 'a+': read,write,append
    # 'w' : clear before, then write
    return codecs.open(gVal['outputFileName'], 'a+', 'utf-8');

#------------------------------------------------------------------------------
# init for output file
def initForOutputFile():
    global gVal;
    gVal['curOutputFileIdx'] = 0;
    gVal['outputFileCreateTime'] = datetime.now().strftime('%Y%m%d_%H%M');
    return;

#------------------------------------------------------------------------------
# just create new output file
def createNewOutputFile():
    global gVal;
    gVal['outputFileName'] = "WXR_" + gVal['blogProvider'] + '_[' + gVal['blogUser'] + "]_" + gVal['outputFileCreateTime'] + '-' + str(gVal['curOutputFileIdx']) + '.xml';
    expFile = codecs.open(gVal['outputFileName'], 'w', 'utf-8');
    if expFile:
        logging.info('Created export WXR file: %s', gVal['outputFileName']);
        expFile.close();
        
        # update
        gVal['curOutputFileIdx'] += 1;
        logging.debug("gVal['curOutputFileIdx']=%d", gVal['curOutputFileIdx']);
    else:
        logging.error("Can not open writable exported WXR file: %s", gVal['outputFileName']);
        sys.exit(2);
    return;

	
	
createNewOutputFile();

#write processed ones
newFile = openOutputFile();
newFile.write(gVal['curGeneratedUni']);
newFile.flush();
newFile.close();
ImN1 2013-03-31
  • 打赏
  • 举报
回复
纯英文的ANSI与utf-8是一样的,除了bom头 所以确保添加的中文字符是utf-8,然后全文件覆盖就可以了
angel_su 2013-03-31
  • 打赏
  • 举报
回复
自行写入的话,确保你的字串是utf-8即可...

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

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