在 Cordova/Phonegap for Android 中包含中文文件名的页面
在 Cordova/Phonegap for Android 中包含中文文件名的页面
本贴首发于:
http://xuekaiyuan.com/forum.php?mod=viewthread&tid=14
将中文文件名重命名为 jarsigner 程序支持的文件名
将文件名按 UTF-8 编码进行 URL 编码。
$encodename = urlencode(iconv('GB2312','UTF-8',$filename));
判断是否和原来的文件名相同
if ($encodename !== $filename) {
如果不相同则重命名
rename($argv[1] . DIRECTORY_SEPARATOR . $filename, $argv[1] . DIRECTORY_SEPARATOR . $encodename);
完整 rename.php 源代码如下
<?php
foreach(scandir($argv[1]) as $filename) {
$encodename = urlencode(iconv('GB2312','UTF-8',$filename));
if ($encodename !== $filename) {
rename($argv[1] . DIRECTORY_SEPARATOR . $filename, $argv[1] . DIRECTORY_SEPARATOR . $encodename);
echo 'rename ' . $filename . ' to ' . $encodename . "\n";
}
}
?>
在程序中将请求还原成相应的文件名
确定需要判断的路径
String urlprefix = "file:///android_asset/www/";
判断当前请求是否属于该路径
if (url.startsWith(urlprefix)) {
属于该路径时,判断当前请求是否包含参数
if (url.contains("?") || url.contains("#")) {
获取文件路径
String relativePath = "www/" + url.substring(urlprefix.length());
尝试按路径打开文件
stream = cordova.getActivity().getAssets().open(relativePath);
不能打开文件时,返回异常信息作为文件内容
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter, true);
e.printStackTrace(printWriter);
byte[] bytes = new byte[0];
try {
bytes = stringWriter.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
stream = new ByteArrayInputStream(bytes);
获取文件的 MIME 类型
String mimetype = FileHelper.getMimeType(url, cordova);
返回该文件
return new WebResourceResponse(mimetype, "UTF-8", stream);
完整 UrlFilter.java 源代码如下
public WebResourceResponse shouldInterceptRequest(String url) {
String urlprefix = "file:///android_asset/www/";
if (url.startsWith(urlprefix)) {
if (url.contains("?") || url.contains("#")) {
return super.shouldInterceptRequest(url);
} else {
String relativePath = "www/" + url.substring(urlprefix.length());
InputStream stream;
try {
stream = cordova.getActivity().getAssets().open(relativePath);
} catch (IOException e) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter, true);
e.printStackTrace(printWriter);
byte[] bytes = new byte[0];
try {
bytes = stringWriter.toString().getBytes("UTF-8");
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}
stream = new ByteArrayInputStream(bytes);
}
String mimetype = FileHelper.getMimeType(url, cordova);
return new WebResourceResponse(mimetype, "UTF-8", stream);
}
} else {
return super.shouldInterceptRequest(url);
}
}
在虚拟机中的效果如图所示
在 Cordova/Phonegap for Android 中包含中文文件名的页面的更多相关文章
- 在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序
在 Linux 中自动生成 Cordova/Phonegap for Android 的 APK 安装程序 本贴首发于: http://xuekaiyuan.com/forum.php?mod=vie ...
- 使用 Cordova(PhoneGap)构建Android程序
移动终端开发随着智能手机的普及变得越来越热,什么项目都想移动一把,但反观要去学这些各个终端的控件使用,实属不易,又特别是每个终端的控件及所用语言都各不相同,使得这种学习变得更加困难. 有没有一种简单的 ...
- 【JS】中ajax的URL中包含中文,后台接收乱码
[问题]ajax提交get请求,url中参数包含中文,后台接收到显示乱码. [解决方案]前台: function getSiteInfoByName(siteName){ var res; $.aja ...
- 【性能测试】:LR中解决接口请求中包含中文字符,服务器不识别的问题
在LR中,直接写的接口请求,如果请求字段包含中文字段,服务器会不识别,这个时候就要用到lr_convert_string_encoding这个函数: 具体用法: lr_convert_string_e ...
- LR中解决接口请求中包含中文字符,服务器不识别的问题
在LR中,直接写的接口请求,如果请求字段包含中文字段,服务器会不识别,这个时候就要用到lr_convert_string_encoding这个函数: 具体用法: lr_convert_string_e ...
- Dynamics CRM 通过OData查询数据URI中包含中文的情况
filter条件如下"?$filter=new_name eq '采购主管' and new_entityname eq 'new_purchaseenquiry' ",如果用这个 ...
- Cocos2dx 代码中包含中文导致编译错误的问题解决方法
从网上下载一个cocos2dx的源码,是IOS版本的,我将其迁移到windows 7下 ,用VS2010编译,出现一堆的C2001错误: 1>d:\cocos2d-x-2.2.6\mygame\ ...
- java web中请求和响应中包含中文出现乱码解析
说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码.而字符编码有多种不 ...
- Android中使用ViewPager实现屏幕页面切换和页面切换效果
之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpag ...
随机推荐
- jQuery选取和操纵元素的特点
jQuery选取和操纵元素的特点 JavaScript选取元素 先来看看不用jQuery的时候我们是怎么处理元素选取的. JavaScript选取元素的时候,可以根据id获取元素,当id不存在的时候, ...
- Canvas入门(3):图像处理和渲染文本
资源:http://www.ido321.com/997.html 一.图像处理(非特别说明,全部结果均来自最新版Google) 在HTML 5中,不仅能够使用Canvas API绘制图形,也能够用于 ...
- JSON解析之Json-lib
1.Json-lib介绍 Json-lib是一个java类库,它用于把beans, maps, collections, java arrays and XML 传递给一个Json,或者返回来把Jso ...
- 安装Windows8.1操作系统 - 初学者系列 - 学习者系列文章
Windows 8这款操作系统是微软最新的操作系统.虽然微软做了推广,但是据消息称市场份额暂时没那么高.下面就对该操作系统的安装进行简要介绍. 1. 将光盘装入光驱,设置BIOS中光驱启动,启动计算 ...
- [Android] 获取WebView的页面标题(Title)-----WebChromeClient.onReceivedTitle()方法的重写
应用开发中需要获取WebView当前页面的标题,可能通过对WebChromeClient.onReceivedTitle()方法的重写来实现 效果图如下: 代码如下: public class Mai ...
- form-validation--表单验证插件
基于jquery的validationEngine表单验证插件,根据官网提示,该插件支持IE6-8,Chrome浏览器,火狐,Safari,Opera 10,但由于有使用到了css3的阴影和圆角样式, ...
- Jqury笔记
1. --------------- -var aa = new Array(); aa.push(1); alert(aa[0]); var aa=[];也表示一个数组: ------------ ...
- 构建日均千万PV Web站点1
如何构建日均千万PV Web站点 (一) 其实大多数互联网网站起初的网站架构都是(Linux+Apache+MySQL+PHP). 不过随着时代的发展,科技的进步.互联网进入寻常百姓家的生活.所谓的用 ...
- js 将long日期格式 转换为标准日期格式方法
我们经常在操作的时候会发现从后台传递到view层的json中datetime类型变成了long型,当然你也可以从后台先转为string类型,但是如果是从和数据库对应的object中封装的话,就不能再去 ...
- MIT Introduction to Computer Science and Programming (Lesson one )
MIT Introduction to Computer Science and Programming (Lesson one ) 这篇文是记载 MIT 计算机科学及编程导论 第一集 的笔记 Les ...