请教Android上在C语言中创建、打开中文目录/文件的问题

Hankel 2011-06-19 09:27:45
请教大侠:
我在Android上开发的应用中带一个C实现的so,需要访问sd卡,并且在上面创建中文目录;现在遇到问题;

目录名称是从网络获取下来的,中文,UTF8编码,比如叫dirname,我直接使用

mkdir(dirname, 0777)创建目录,也没报错,但是在sd卡上看该目录并没有创建成功;

请问在C语言中要创建中文目录,对编码有什么要求么?

新人分不,请大家帮忙解答,感谢!
...全文
331 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
念茜 2011-06-20
  • 打赏
  • 举报
回复
java 的string 不管是英文字符还是中文字符都是2字节存储
jni和c就不一样了
char (1)和wchar(2)
你试试创建中文目录名为一个中文,扩充一下存储单元为之前的2倍,如果1个字没有错,那就是这个问题了
Hankel 2011-06-19
  • 打赏
  • 举报
回复
没有哪位能再给点建议么?
Hankel 2011-06-19
  • 打赏
  • 举报
回复
再对该问题补充一下:

应用分了两个部分,JAVA和C库,中间由JNI转调;

创建目录时,由JAVA传一个工作目录给C库,然后C库把从网络获取的子目录拼接上去再创建,

比如java创建的工作目录:/sdcard/test/中文测试/

C库从网络获取到的目录:中文再测试

那么C库就会使用mkdir创建/sdcard/test/中文测试/中文再测试/ 这个目录;

从现象上看JAVA创建的中文工作目录成功,C库创建的子目录失败,但是mkdir并没有报错;

Hankel 2011-06-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lizhengjun2010 的回复:]

那可能是编码问题哈!!android编码为utf-8,网上读取的可能是gb2312

转换:

byte[] data;//数据为gb2312
String strGB=new String(data,"gb2312");
String strUTF=new String(str.getBytes(),"utf-8");

楼主看看是不是这种情况!
[/Quote]

感谢提醒;
文件目录是由c库直接从网络获取下来的,获取到的就是utf8编码的,这个我确认过;

我困惑的是mkdir调用没有报错,但是目录并没有创建成功;
按道理如果有权限或者编码问题,该调用应该报错才对。
lizhengjun2010 2011-06-19
  • 打赏
  • 举报
回复
那可能是编码问题哈!!android编码为utf-8,网上读取的可能是gb2312

转换:

byte[] data;//数据为gb2312
String strGB=new String(data,"gb2312");
String strUTF=new String(str.getBytes(),"utf-8");

楼主看看是不是这种情况!
Hankel 2011-06-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lizhengjun2010 的回复:]

sdcard加写权限没啊!

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
[/Quote]

感谢提醒,sd卡的权限是有的,创建英文目录,创建文件都没有问题。
lizhengjun2010 2011-06-19
  • 打赏
  • 举报
回复
sdcard加写权限没啊!

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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