关于字符集常量类的问题?

wnss8888 2007-08-30 11:32:56
我们在编程时经常会转换字符集,比如UTF-8,iso-8859-1.之类的。
往往会采用硬编码。我在jdk里找了半天,这些值到底是哪个类的常量 。知道的告诉我一下。谢谢。
...全文
752 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ykrocku 2007-09-03
  • 打赏
  • 举报
回复

楼主啊,字符集名在 Java 中定义的本身就不是常量。而是存储在一个 Map 之中的,通过存诸在 Map 中的名字,再去找到具体适用的字符集类再进行字符解析的。在这两个类中 sun.nio.cs.StandarCharsets、sun.nio.cs.ext.ExtendedCharsets 就是存储了些 map,像你上面调用 Charset.availableCharsets(); 这个方法也是从上面那两个类中获得的啊。
---------
BINGO~
  • 打赏
  • 举报
回复
楼主啊,字符集名在 Java 中定义的本身就不是常量。而是存储在一个 Map 之中的,通过存诸在 Map 中的名字,再去找到具体适用的字符集类再进行字符解析的。在这两个类中 sun.nio.cs.StandarCharsets、sun.nio.cs.ext.ExtendedCharsets 就是存储了些 map,像你上面调用 Charset.availableCharsets(); 这个方法也是从上面那两个类中获得的啊。
  • 打赏
  • 举报
回复
ISO-Latin-1 在java中到底对应哪一种编码。

对应 ISO-8859-1
wnss8888 2007-09-03
  • 打赏
  • 举报
回复
用这段代码可以查看到本系统内支持的字符集。
你们给我提供的类中都没有找到常量。
SortedMap<String, Charset> availableCharsets = Charset
.availableCharsets();
Set names = availableCharsets.keySet();
Iterator it = names.iterator();
while (it.hasNext()) {
String next = (String)it.next();
System.out.println(availableCharsets.get(next));
}

ISO-Latin-1 在java中到底对应哪一种编码。

Big5
Big5-HKSCS
EUC-JP
EUC-KR
GB18030
GB2312
GBK
IBM-Thai
IBM00858
IBM01140
IBM01141
IBM01142
IBM01143
IBM01144
IBM01145
IBM01146
IBM01147
IBM01148
IBM01149
IBM037
IBM1026
IBM1047
IBM273
IBM277
IBM278
IBM280
IBM284
IBM285
IBM297
IBM420
IBM424
IBM437
IBM500
IBM775
IBM850
IBM852
IBM855
IBM857
IBM860
IBM861
IBM862
IBM863
IBM864
IBM865
IBM866
IBM868
IBM869
IBM870
IBM871
IBM918
ISO-2022-CN
ISO-2022-JP
ISO-2022-KR
ISO-8859-1
ISO-8859-13
ISO-8859-15
ISO-8859-2
ISO-8859-3
ISO-8859-4
ISO-8859-5
ISO-8859-6
ISO-8859-7
ISO-8859-8
ISO-8859-9
JIS_X0201
JIS_X0212-1990
KOI8-R
Shift_JIS
TIS-620
US-ASCII
UTF-16
UTF-16BE
UTF-16LE
UTF-8
windows-1250
windows-1251
windows-1252
windows-1253
windows-1254
windows-1255
windows-1256
windows-1257
windows-1258
windows-31j
x-Big5-Solaris
x-euc-jp-linux
x-EUC-TW
x-eucJP-Open
x-IBM1006
x-IBM1025
x-IBM1046
x-IBM1097
x-IBM1098
x-IBM1112
x-IBM1122
x-IBM1123
x-IBM1124
x-IBM1381
x-IBM1383
x-IBM33722
x-IBM737
x-IBM834
x-IBM856
x-IBM874
x-IBM875
x-IBM921
x-IBM922
x-IBM930
x-IBM933
x-IBM935
x-IBM937
x-IBM939
x-IBM942
x-IBM942C
x-IBM943
x-IBM943C
x-IBM948
x-IBM949
x-IBM949C
x-IBM950
x-IBM964
x-IBM970
x-ISCII91
x-ISO-2022-CN-CNS
x-ISO-2022-CN-GB
x-iso-8859-11
x-JIS0208
x-JISAutoDetect
x-Johab
x-MacArabic
x-MacCentralEurope
x-MacCroatian
x-MacCyrillic
x-MacDingbat
x-MacGreek
x-MacHebrew
x-MacIceland
x-MacRoman
x-MacRomania
x-MacSymbol
x-MacThai
x-MacTurkish
x-MacUkraine
x-MS950-HKSCS
x-mswin-936
x-PCK
x-windows-50220
x-windows-50221
x-windows-874
x-windows-949
x-windows-950
x-windows-iso2022jp

  • 打赏
  • 举报
回复
标准字符集在 sun.nio.cs.StandarCharsets 类里定义了,扩展字符集在 sun.nio.cs.ext.ExtendedCharsets 类中定义了。

再根据这些包里的字符集类去解析。
  • 打赏
  • 举报
回复
可以使用 WinRAR 等工具打开这些 jar 文件,找到某些类(class文件),拖出来后,用 jad 等工具反编译一下,基本上就可以看到源代码了,有的源代码里竟还有标号和 goto 语句,可见这些 class 非 Java 编译的(或者是 Java 开发人员内部使用的 Java 编译器)。
  • 打赏
  • 举报
回复
sun.nio.cs.ext 包下有扩展的字符集类,在 %JRE_HOME%/lib/charsets.jar 中
sun.nio.cs 包下有标准的字符集类,在 %JRE_HOME%/lib/rt.jar 中

这些类属于 Java 的运行环境(Java 运行的基础)类库,不能在 JDK API 的帮助中查到。
bit1010 2007-08-30
  • 打赏
  • 举报
回复
这些字符串本身在Java中没有定义常量,但是可以在Java中可以获得当前系统可用的字符集,好项是在CharacterSet类中。

62,615

社区成员

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

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