乱码重新编译
❶ 如何解决嵌入式软件开发过程中的乱码问题
解决过程:
刚开始是简单的编码不匹配情况,修改secureCRT中的传输编码方式从默认变为utf8,中文不再乱码,但变成了问号,“??????”;
因为中文目录是在挂载的SD卡中的(居然没有尝试一下网络挂载或者其他的方式下中文是否乱码,)。,编译内核的时候fat文件系统的codepage和isochaset配置对,挂载时选择vfat,-o命令选择codepage和isocharset匹配就好了,具体的命令是,mount -t vfat -o codepage=936,iocharset=utf8 /dev/mmcblk0p1 /home/。然后接下来几天晚上就一直在鼓捣这些东西,无解;
高版本的busybox取消了中文支持,进入busybox配置,发现已经勾选了Unicode的支持。还需要修改busybox中的另外两个文件printable_string.c以及unicode.c,把大于0x7f替换为问号的这个选择条件去掉才行。看了一下源码,觉得改的地方都是不勾Unicode才需要改,重新配置编译busybox,替换根文件系统,如果问题还在进行下一步。
既然上面的提示中已经发现不勾选Unicode支持中文的方式,那就先试一下不支持Unicode显示中文的方式吧,修改printable_string.c以及unicode.c,重新编译,烧写启动设备,发现去掉Unicode果然中文支持了,不再显示问号;到这一步还出现问题再进行下一步。
LAST_SUPPORTED_WCHAR,通过busybox源码,可以发现有这么一个判断if (wc > CONFIG_LAST_SUPPORTED_WCHAR){go subset;},而在subset的地方,wc被赋值为问号,明显是这个LAST_SUPPORTED_WCHAR的原因;
查看busybox配置,发现定义表示的是Range of supported Unicode characters,默认填的值才700多,而中文在Unicode中的位置查了一下最高到U+2FA1D,随便给这个值改了一个大于2FA1D的值,重新编译烧写根文件系统,中文显示成功!
❷ c语言编译运行乱码是什么原因
这种情况多数是由于操作系统的语言选项不正确引起的。建议你查看一下控制面板中的区域和语言选项,特别是有关“非Unicode程序的语言”,一定要选择成“中文(简体,中国)”。然后重启电脑。
❸ 在CMD里编译java文件是出乱码
出现乱码可能是因为:
JDK没有安装好或是用了不完整的(损坏的)安装包。
环境变量未设置或设置错误。
JDK没有安装好或是用了不完整的(损坏的)安装包的解决方法:
用可信软件(大数字,企鹅等)或控制面板里删除之前下载的所有java,
到java官网下载最新版JDK
安装(需记住目录)
重新配置环境变量
环境变量未设置或设置错误的解决方法:
右键我的电脑,属性,高级设置,环境变量
新建,变量名:JAVA_HOME
变量值:C:Program FilesJavajdk1.7.0(你安装java的目录)
新建变量名:CLASSPATH
变量值:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;(输入法切换到英文,开头的【.;】和末尾的【;】不要漏掉)
在系统变量列表里找到Path变量,双击
变量名:Path(不变)
变量值:%JAVA_HOME%in;%JAVA_HOME%jrein;
点击确定完成环境变量的配置,打开cmd输入java和javac测试
弹出下图所示的东西就表明环境变量编辑成功
java:
❹ Linux中unzip解压时中文乱码如何解决
更改源码解决乱码
调试发现问题出现在MultiByteToWideChar方法里,
如 MultiByteToWideChar(CP_ACP,0,fn,-1,tfn,MAX_PATH); 到这里时fn中的name属性值还是正常的,在这个方法内部执行完tfn就乱了。
解决方法:
打开unzip.cpp源文件,找到函数
ZRESULT TUnzip::Get(int index,ZIPENTRY *ze)
{ // ......
// ......} 12345
这个函数里有
#ifdef UNICODE
MultiByteToWideChar(CP_UTF8,0,fn,-1,tfn,MAX_PATH);#else
strcpy(tfn,fn);#endif12345
把 CP_UTF8 改为CP_ACP, ( CP_ACP 指示要使用当前设置的 API 默认 Windows ANSI 代码页)
重新编译后
这样就解决了解压中文文件名称乱码的问题
编译时解决源码问题(无需更改源码)
上面的情况,我们我观察到unzip源代码这段开始的地方有判断
#ifndef Ext_ASCII_TO_Native 1
这样问题似乎更简单了,不用改源代码,只需在make时定义 Ext_ASCII_TO_Native 即可,这样 Ext_ASCII_TO_Native 实际为一个空的宏,不进行任何转换操作。
比如,使用下面的方法编译
make -DExt_ASCII_TO_Native 1
或者在bash执行下面两行
export LOCAL_UNZIP=-DExt_ASCII_TO_Native
make12
unzip解压缩含中文文件名zip包是出现乱码的问题解决!
如果您的系统已经安装了unzip
方法一 unzip行命令解压,指定字符集
通过unzip行命令解压,指定字符集
unzip -O CP936 xxx.zip (用GBK, GB18030也可以)1
方法二 在环境变量中,指定unzip参数
在环境变量中,指定unzip参数,总是以指定的字符集显示和解压文件
/etc/environment中加入2行
UNZIP=”-O CP936″
ZIPINFO=”-O CP936″12
方法三 利用pyton来处理
复制以下内容(python)保存未myuzip.py文件脚本,并修改运行权限为可运行(chmod +x uzip)
#!/usr/bin/env python# -*- coding: utf-8 -*-# uzip.pyimport osimport sysimport zipfileprint "Processing File " + sys.argv[1]
file=zipfile.ZipFile(sys.argv[1],"r");for name in file.namelist():
utf8name=name.decode('gbk') print "Extracting " + utf8name
pathname = os.path.dirname(utf8name) if not os.path.exists(pathname) and pathname!= "":
os.makedirs(pathname)
data = file.read(name) if not os.path.exists(utf8name):
fo = open(utf8name, "w")
fo.write(data)
fo.close
file.close()
这样以后我们解压缩时只需要运行此文件即可
./myuzip.py xxxx.zip