【100分】关于 iso-88591-1 gbk utf-8 汉字编码的问题

-droidcoffee- 2010-10-28 03:02:23
System.out.println(java.net.URLEncoder.encode("北京", "iso-8859-1"));
System.out.println(java.net.URLEncoder.encode("北京", "gbk"));
System.out.println(java.net.URLEncoder.encode("北京", "utf-8"));

=========================

打印信息 如下

%3F%3F
%B1%B1%BE%A9
%E5%8C%97%E4%BA%AC


谁帮忙解释一下 其中的原理?
...全文
3923 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
-droidcoffee- 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qqzhuyuehe 的回复:]

试试下面的,先创建目录,然后再创建文件。
Java code
package com.csdn.test;

import java.io.File;
import java.io.IOException;

public class Test
{
public static void main(String[] args)
{
File file = new……
[/Quote]
[Quote=引用 13 楼 wangdalii 的回复:]

自己写一个方法。
Java code

if(创建文件失败)
{
file.getParent().mkdirs();
再创建文件一次。
}
[/Quote]


艾 看来只能自己写了啊。 那个我也回, 结贴, 谢谢各位。。。
bf234511171 2010-10-29
  • 打赏
  • 举报
回复
很有难度啊!
wangDalii 2010-10-29
  • 打赏
  • 举报
回复
自己写一个方法。

if(创建文件失败)
{
file.getParent().mkdirs();
再创建文件一次。
}
qqzhuyuehe 2010-10-29
  • 打赏
  • 举报
回复
试试下面的,先创建目录,然后再创建文件。
package com.csdn.test;

import java.io.File;
import java.io.IOException;

public class Test
{
public static void main(String[] args)
{
File file = new File("E:\\111\\222");
if (!file.exists())
{
try
{
file.mkdirs();
file = new File(file, "111.txt");
file.createNewFile();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
-droidcoffee- 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 achilles_dynasty 的回复:]

文件的编码格式? 你向文件中写入的流是什么编码,文件中内容的编码就是流的编码啊。
[/Quote]

噢 明白了 多谢啊。

还有谁帮忙解决一下 7楼的问题?

据我所知, mkdir mkdirs 只能创建目录

而 createNewFile 只能创建文件?

除了 自己实现之外, 系统提供一次性创建 “目录 + 文件” 的api吗
Achilles_Dynasty 2010-10-28
  • 打赏
  • 举报
回复
文件的编码格式? 你向文件中写入的流是什么编码,文件中内容的编码就是流的编码啊。
-droidcoffee- 2010-10-28
  • 打赏
  • 举报
回复
还有 创建文件的时候 如何 指定 文件的编码 格式 ??

今下午 遇到了一串串问题 因为对file 操作不熟悉 , 不好意思

麻烦各位 多多指教
vasdjj 2010-10-28
  • 打赏
  • 举报
回复
不熟悉,学习一下
-droidcoffee- 2010-10-28
  • 打赏
  • 举报
回复
接着请教一个问题


// 11 22 11.txt 均不存在
File file = new File("c:/11/22/11.txt");
if(file.exists() == false){
file.createNewFile();
}


请问一下: 创建文件的时候 必须得 先穿件 目录 , 再创建文件吗?

除了自己一步步的创建 有没有办法 一下子把 c:/11/22/11.txt 创建出来??



貌似 我c:/23.txt 这样子就很easy 的创建出文件来了


goes_kad 2010-10-28
  • 打赏
  • 举报
回复
首先让我们来看看对于iso-8859-1编码将汉字编码后产生的字节数组:
byte[] b = "北京".getBytes("iso-8859-1");
for (int i = 0; i < b.length; i++) {
System.out.println((int)b[i]);
}
输出为:
63
63
这是因为iso-8859-1编码是不能识别汉字的,所以会把他们通通转换为值为63的单字节。
那么接下来URLEncoder会把这些字节转换为16进制数-3F(63), 同时加上一个%标识。这也是因为初始字符串是
对于非ASCII字符的原因。
-droidcoffee- 2010-10-28
  • 打赏
  • 举报
回复
1、2 楼, 那他们在内存里是怎么个存储的?

另外可不可以解释一下 汉字在内存里又是怎么存储的呢?

谢。。。。
zheng192004 2010-10-28
  • 打赏
  • 举报
回复
我是来学习的~~
茫茫大海 2010-10-28
  • 打赏
  • 举报
回复
楼上的两位都说清楚了!
precious 2010-10-28
  • 打赏
  • 举报
回复
iso-8859-1是欧洲字符编码 是单字节的
gbk是中文字符编码 是双字节的
utf-8字符编码是三个字节的
majy 2010-10-28
  • 打赏
  • 举报
回复
第一个怕是转译不回中文了
第二个,GBK是双字节编码,一个中文转成2个字节,没什么问题
第三个,utf-8是多字节编码,中文字我印象中都是三字节,所以,一共有6字节

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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