文件名的字符编码和c的fopen函数问题

问题描述

文件名的字符编码和c的fopen函数问题

问一个问题,文件名的存储和文件名的显示应该是两回事吧
中文版windows的环境字符集是GBK
GBK中“茅”的编码是 195 169(十进制)
如果我在中文版windows里看到个文件叫“a茅”
那么他的文件名在硬盘中的存储方式应该是97 195 169
我编了个c程序如下:
FILE *fp;
char b[100]={'a',195,169,0};
strcat(b,".html");
if((fp=fopen(b,"w+"))!=NULL)printf("created!");
成功创建了一个“a茅.html”

问题来了
如果在英文版操作系统中创建了一个“aé.html”
é在ISO-8559各编码下都是233(十六进制:E9)
那么这个文件名的存储方式应该是97 233 等等等
如果我把这个文件拷进我的电脑 那么在GBK字符集下显示的应该是乱码: a?.html

那我就想 如果我用c创建同样一个文件,虽然GBK显示不了233,但是存储的东西应该不会

变啊
程序如下:
FILE *fp;
char b[100]={'a',233,0};
strcat(b,".html");
if((fp=fopen(b,"w+"))!=NULL){
printf("created!");}
结果没有创建成功。
没道理啊,这个程序在执行的时候,告诉操作系统要创建文件,传输给操作系统文件名,

这个过程应该是与字符集没有关系的啊,一切都是二进制的,系统照做就是了,哪管这个

文件名会显示成什么样子。
那为什么不成功呢?

解决方案

strcat是按字符char方式处理,你的数据编码不符合,所以出错了

时间: 2024-09-17 04:08:01

文件名的字符编码和c的fopen函数问题的相关文章

DedeCMS中用到的字符编码转换1

PHP自带的iconv和mbstring库都可以完成这项工作,但一般的虚拟主机很少支持 其中的全局变量在include/common.inc.php 库文件在include/data下 Java代码   <?php  if(!defined('DEDEINC')) exit('dedecms');   /**   * DedeCMS中用到的字符编码转换的小助手函数   *   * @version        $Id: charset.helper.php 1 2010-07-05 11:43

C++字符串完全指引之一 —— Win32 字符编码

C++字符串完全指引之一 -- Win32 字符编码 原著:Michael Dunn 翻译:Chengjie Sun 原文出处:CodeProject:The Complete Guide to C++ Strings, Part I  引言 毫无疑问,我们都看到过像 TCHAR, std::string, BSTR 等各种各样的字符串类型,还有那些以 _tcs 开头的奇怪的宏.你也许正在盯着显示器发愁.本指引将总结引进各种字符类型的目的,展示一些简单的用法,并告诉您在必要时,如何实现各种字符串

快速入手Python字符编码_python

前言 对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭. 文章针对Python 2.7,主要因为3对的编码已经有了很大的改善并且实际原理一样,更改一下操作命令即可. 了解完本文,你可以轻松解决文字处理,特殊平台(Windows?)下的编码,爬虫编码等问题. 阅读建议 本文分为如下几个部分:     1.原理     2.具体操作     3.建议的使用习惯     4.疑难问题解答 如果想要了解我给出的使用习惯,可以直接跳到建议的使用习惯. 如果只想要

Python中字符编码简介、方法及使用建议_python

1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节的ASCII已无法满足需求.后来每个语言就制定了一套自己的编码,由于单字节

修改MySQL数据库字符编码为UTF-8解决中文乱码

问题: 由于MySQL编码原因会导致数据库出现乱码. 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 mysql -uroot -p #输入密码进入 status; #查看当前MySQL运行状态,如下图所示: 系统运维  www.osyunwei.com  温馨提醒:系统运维原创内容版权所有,转载请注明出处及原文链接 Server characterset: latin1 Db characte

怎么识别zip文件字符编码方式?UTF-8,GBK等等

问题描述 google了好久没有找到,求思路 解决方案 本帖最后由 hero06 于 2014-08-19 15:13:10 编辑解决方案二:编码应该是里面文件的编码吧,单纯zip是没有编码的.解决方案三:引用1楼fangmingshijie的回复: 编码应该是里面文件的编码吧,单纯zip是没有编码的. 在不知道文件编码的情况下zip文件怎么解压缩不报错解决方案四:解压缩报错,是里的文件或者代码有问题,和zip文件本身什么编码没有关联.解决方案五:引用3楼fangmingshijie的回复: 解

php fopen函数创建中文文件名出错

PHP使用fopen().filesize()等PHP文件系统函数处理中文名文件经常会提示出错,如下错误信息: Warning: fopen(--): failed to open stream: No such file or directory in-- Warning: filesize(--): stat failed for -- 这种问题通常是由于PHP的文件编码与操作系统的编码不一致引起的.当我们使用PHP处理中文名称的文件时,必须保持PHP文件系统函数中的文件名称编码与系统编码保

ajax代理程序,自动判断字符编码

ajax|编码|程序 由于ajax在跨域的访问上有问题,目前最好的方法是做代理.写了个代理程序和心得 为了做ajax的代理,研究了下服务器端的xmlhttp并和客户端的ajax中的xmlhttp做了个比较,后台代码是asp的 服务器端的xmlhttp也就是asp小偷程序,我把代码改成了javascript. 1.在服务器端的xmlhttp.Open("GET",url,false)异步必须是关闭的,而客户端的异步是打开的,这个很好理解. 2.在服务器端的xmlhttp.Response

ajax代理程序自动判断字符编码

ajax|编码|程序 由于ajax在跨域的访问上有问题,目前最好的方法是做代理.写了个代理程序和心得. 为了做ajax的代理,研究了下服务器端的xmlhttp并和客户端的ajax中的xmlhttp做了个比较,后台代码是asp的. 服务器端的xmlhttp也就是asp小偷程序,我把代码改成了javascript. 1.在服务器端的xmlhttp.Open("GET",url,false)异步必须是关闭的,而客户端的异步是打开的,这个很好理解.2.在服务器端的xmlhttp.Respons