`
mmdev
  • 浏览: 13243442 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

用于MIDP的URLEncoder类

阅读更多

由于MIDP没有J2SE对应的java.net.URLEncoder类,因此,要向服务器发送HTTP请求,必须自己进行URL编码,参考JDK1.4.2的src代码,将其改为一个能用在MIDP环境中的URLEncoder类:

// URLEncoder.java
package com.mboker.blog.midp.http;

import java.io.*;

/**
* Encode url, just like java.net.URLEncoder.encode() in J2SE.<br>
* NOTE: This class is modified from java.net.URLEncoder class in J2SE 1.4.
*
* @author Xuefeng
*/
class URLEncoder {

private static final int MAX_BYTES_PER_CHAR = 10; // rather arbitrary limit, but safe for now

private static boolean[] dontNeedEncoding;
private static final int caseDiff = ('a' - 'A');

static {
dontNeedEncoding = new boolean[256];
for (int i='a'; i<='z'; i++) {
dontNeedEncoding[i] = true;
}
for (int i='A'; i<='Z'; i++) {
dontNeedEncoding[i] = true;
}
for (int i='0'; i<='9'; i++) {
dontNeedEncoding[i] = true;
}
dontNeedEncoding[' '] = true;
dontNeedEncoding['-'] = true;
dontNeedEncoding['_'] = true;
dontNeedEncoding['.'] = true;
dontNeedEncoding['*'] = true;
}

private URLEncoder() {}

public static String encode(String s) {
boolean wroteUnencodedChar = false;

StringBuffer out = new StringBuffer(s.length());
ByteArrayOutputStream buf = new ByteArrayOutputStream(MAX_BYTES_PER_CHAR);
OutputStreamWriter writer = new OutputStreamWriter(buf);

for (int i = 0; i < s.length(); i++) {
int c = (int) s.charAt(i);
if (c<256 && dontNeedEncoding[c]) {
out.append((char) (c==' ' ? '+' : c));
wroteUnencodedChar = true;
} else {
// convert to external encoding before hex conversion
try {
if (wroteUnencodedChar) { // Fix for 4407610
writer = new OutputStreamWriter(buf);
wroteUnencodedChar = false;
}
writer.write(c);
/*
* If this character represents the start of a Unicode
* surrogate pair, then pass in two characters. It's not
* clear what should be done if a bytes reserved in the
* surrogate pairs range occurs outside of a legal surrogate
* pair. For now, just treat it as if it were any other
* character.
*/
if (c >= 0xD800 && c <= 0xDBFF) {
if ((i + 1) < s.length()) {
int d = (int) s.charAt(i + 1);
if (d >= 0xDC00 && d <= 0xDFFF) {
writer.write(d);
i++;
}
}
}
writer.flush();
} catch (IOException e) {
buf.reset();
continue;
}
byte[] ba = buf.toByteArray();
for (int j = 0; j < ba.length; j++) {
out.append('%');
char ch = toHex((ba[j] >> 4) & 0xF);
// converting to use uppercase letter as part of
// the hex value if ch is a letter.
if (isLetter(ch)) {
ch -= caseDiff;
}
out.append(ch);
ch = toHex(ba[j] & 0xF);
if (isLetter(ch)) {
ch -= caseDiff;
}
out.append(ch);
}
buf.reset();
}
}
return out.toString();
}

private static char toHex(int digit) {
if ((digit >= 16) || (digit < 0)) {
return '\0';
}
if (digit < 10) {
return (char)('0' + digit);
}
return (char)('a' - 10 + digit);
}

private static boolean isLetter(char c) {
return (c>='a' && c<='z');
}
}

J2SE的URLEncoder依赖于java.lang.Character的许多特性,将其全部剔除并改造为基本运算,即可在MIDP环境中使用,中文测试也一切正常。

分享到:
评论

相关推荐

    java中的URLEncoder和URLDecoder类.docx

    在 Java 中,URLEncoder 和 URLDecoder 是两个非常重要的类,它们用于处理 URL 编码和解码问题。在本文中,我们将深入探讨这两个类的使用方法、特点和应用场景。 一、URLEncoder 类 URLEncoder 类是一个静态类,它...

    J2ME URLEncoder 和 URLDecoder 类的实现

    这两个类在标准Java SE环境中用于对URL字符串进行编码和解码,以确保它们符合URL的规范,避免在传输过程中出现错误。在J2ME中,由于资源限制,这些类可能不被支持。因此,为了在J2ME平台上使用类似的功能,我们需要...

    使用URLDecoder和URLEncoder 区别

    URLDecoder 和 URLEncoder 是 Java 中两个重要的类,它们用于完成普通字符串和 application/x-www-form-urlencoded MIME 字符串之间的相互转换。在 Web 开发中,字符串之间的转换是一个常见的问题,特别是在处理非...

    URLEncoder与URLDecoder的应用

    在Java编程语言中,`URLEncoder`与`URLDecoder`是处理URL编码和解码的两个重要工具类。它们主要应用于对字符串进行编码或解码,确保这些字符串能够安全地在网络上传输。尤其是在处理包含特殊字符(如中文字符)的...

    C++ 版本UrlEncoder编码解码工具:支持ANSIC和UTF8格式

    C++ 版本UrlEncoder编码解码工具:支持ANSIC和UTF8格式,是URLEncoderHTML 格式编码的实用工具类。详情参照文章:...

    j2ME URLEncoder Vs URLDEcoder

    在Java Micro Edition (J2ME) 平台上,URLEncoder和URLDecoder是两个非常重要的工具类,主要用于处理HTTP请求中的参数编码与解码。这两个类位于`java.net`包下,对于开发移动应用,尤其是涉及到网络通信的应用时,...

    URLEncoder

    支持UTF8、16、32编解码。

    java使用URLDecoder和URLEncoder对中文字符进行编码和解码

    在Java编程语言中,`URLDecoder`和`URLEncoder`是两个非常重要的工具类,主要用于处理URL中的中文字符和其他特殊字符。这两个类位于`java.net`包下,可以帮助开发者进行字符串编码和解码,确保数据在网络传输过程中...

    urlencoder:java.net.URLEncoder

    urlencoder 在Node.js中实现Java Land URLEncoder安装$ npm install urlencoder 例子超级简单: var encoder = require ( 'urlencoder' ) ;encoder . encode ( '哈哈' ) ;执照麻省理工学院

    java中URLEncoder.encode与URLDecoder.decode处理url特殊参数的方法

    `URLEncoder.encode()` 和 `URLDecoder.decode()` 是Java标准库中的两个关键方法,分别用于对URL参数进行编码和解码,以确保数据能够正确无误地在网络间传输。 **`URLEncoder.encode()`** 方法接受两个参数:需要...

    UrlDecoder和UrlEncoder使用详解_动力节点Java学院整理

    UrlDecoder和UrlEncoder是Java语言中两个重要的工具类,分别用于URL编码和解码。下面是对这两个类的详细介绍和使用方法。 一、UrlEncoder UrlEncoder是Java语言中一个静态方法的工具类,用于将String转换为...

    expression-engine-urlencoder:用于Expression Engine 3或更高版本的插件,可对字符串进行url编码

    表达式引擎:URL编码器附加组件用于Expression Engine 3或更高版本的附加组件,可使用PHP 函数或函数对字符串进行url编码。安装将urlencoder目录复制到您的system / user / addons文件夹中登录到Expression Engine...

    URLEncoder-crx插件

    URLEncoder-crx插件是一款专为浏览器设计的实用工具,主要功能是帮助用户快速地对URL进行编码和解码。在互联网应用中,URL(统一资源定位符)有时需要进行编码,以确保特殊字符能在HTTP请求中正确传输。这个插件提供...

    java中用URLConnection类post方式提交表单.pdf

    URLConnection 是 Java.net 包中的一个类,用于表示到 URL 的连接。该类提供了一些方法来处理 HTTP 请求,例如 setRequestMethod()、setRequestProperty()、connect() 等。 在我们的示例代码中,我们定义了一个 ...

    一些工具类的整合

    在Java中,`java.net.URLEncoder`和`java.net.URLDecoder`提供了这类功能。在工具类中,我们可以封装这两个类的方法,方便在处理URL时直接调用。 再来说说网络辅助工具类,这类工具通常包括处理HTTP请求、响应、...

    java 使用URLDecoder和URLEncoder对中文进行处理

    在Java编程语言中,URLDecoder和URLEncoder是两个非常重要的工具类,主要用于处理URL(统一资源定位符)中的中文字符。这是因为URL的标准格式不支持直接包含非ASCII字符,特别是中文等多字节字符,需要进行特定的...

    Java实现url加密处理的方法示例

    在Java中,`sun.misc.BASE64Encoder` 和 `sun.misc.BASE64Decoder` 类可用于Base64编码和解码,但需要注意的是,这些类不是Java标准库的一部分,可能在某些Java版本中不可用。推荐使用Java 8引入的`java.util.Base64...

    Java中的UrlDecoder 和 UrlEncoder_动力节点Java学院整理

    Java中的`UrlDecoder`和`UrlEncoder`是两个非常重要的工具类,主要用于处理URL编码和解码的问题。在Web开发中,特别是在HTTP请求和响应中,URL编码是必不可少的步骤,因为URL中不能包含某些特殊字符,如空格、中文...

    java android httpURLConnection的封装

    在处理请求参数时,会使用URLEncoder类将参数编码为适合HTTP传输的格式。 在实际应用中,封装后的httpURLConnection类应该能够支持常见的HTTP操作,如GET和POST请求。GET请求通常用于从服务器检索数据,而POST请求...

Global site tag (gtag.js) - Google Analytics