首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 数据库 第二书店 程序员

tianhao960/ 


共453个网摘 [ 1  2  3  4  5  6 ... 16 ]  下一页  |  访问tianhao960的个人空间

对论坛中有关数据类型转换的整理_朵斯提_猫扑博客

tianhao960收录,时间:2008-6-8 10:56:58 | 相关网摘我也收藏

本人并未对所有方法都做测试,仅仅是为了给爱猫扑.爱生活。


如何用sys as sysdba权限连接数据库进行EXP/IMP - oracle - nocode的blog

tianhao960收录,使用标签:oracle,时间:2008-5-15 19:44:50 | 相关网摘我也收藏

Applies to:
Oracle Server - Enterprise Edition - Version: 8.1.7.0 to 10.2.0.0
Oracle Server - Personal Edition - Version: 8.1.7.0 to 10.2.0.0
Oracle Server - Standard Edition - Version: 8.1.7.0 to 10.2.0.0
Information in this document applies to any platform.

Goal
This document demonstrates how to connect AS SYSDBA when starting an export or import.

Incorrect usage of single or double quotes can result in errors such as:

LRM-00108: invalid positional parameter value 'as'
EXP-00019: failed to process parameters, type 'EXP HELP=Y' for help
EXP-00000: Export terminated unsuccessfully

Or:

LRM-00108: invalid positional parameter value 'sysdba'

Or:

LRM-00108: Message 108 not found; No message file for product=ORACORE, facility=LRM
Solution
SYSDBA is used internally in the Oracle database and has specialized functions. Its behavior is not the same as for generalized users. For example, the SYS user cannot do a transaction level consisent read (read-only transaction). Queries by SYS will return changes made during the transaction even if SYS has set the transaction to be READ ONLY. Therefore export parameters like CONSISTENT, OBJECT_CONSISTENT, FLASHBACK_SCN, and FLASHBACK_TIME cannot be used.
Starting with Oracle10g, the export shows a warning that the export is not consistent when the export is started with CONSISTENT=Y and connects to the database with the user SYS (or as SYSDBA):

EXP-00105: parameter CONSISTENT is not supported for this user

Note that Oracle automatically provides read consistency to a query so that all the data that the query sees comes from a single point in time (statement-level read consistency). For export this means that the export of table data is consistent. However, if a table contains nested tables, the outer table and each inner table are exported as separate transactions. And if a table is partitioned, each partition is exported as a separate transaction. If a nested table or a partitioned table was updated during the export, the data that is exported while connected as the SYS schema could be inconsistent.

Typically, there is no need to invoke Export or Import as SYSDBA, except in the following situations:
- at the request of Oracle technical support;
- when exporting a transportable tablespace set with the old-style export utility (Oracle9i and Oracle8i);
- when importing a transportable tablespace set with the old-style import utility (Oracle10g, Oracle9i, and Oracle8i).

The examples below are based on:
- the export of table emp, owned by the demo schema scott.
- schema SYS with the password: change_on_install.
- alias 'instance' that is specified in the tnsnames.ora file and used for a connect to the database.

To invoke Export or Import as SYSDBA, use the following syntax (this syntax is similar when invoking import and the syntax has not changed with the new Oracle10g Export DataPump and Import DataPump utilities):

1. Command line.
Enclose the connect string with a single quote character:

Windows:
exp 'sys/change_on_install@instance as sysdba' tables=scott.emp

Unix (you need to 'escape' the single quote):
exp \'sys/change_on_install@instance as sysdba\' tables=scott.emp

VMS (use [double_quote][single_quote]...[single_quote][double_quote]):
exp "'sys/change_on_install@instance as sysdba'" tables=scott.emp

Note that this VMS syntax is also a valid syntax on Unix and on Windows.


2. Interactive
Do not specify any connect string on the command line, so you will be prompted to enter it. E.g.:

% exp tables=scott.emp

Export: Release 10.1.0.2.0 - Production on Fri Jun 25 07:39:46 2004
Copyright (c) 1982, 2004, Oracle. All rights reserved.

Username: sys/change_on_install@instance as sysdba

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
... etc.


3. Parameter file.
You can also specify the username in the parameter file. In this situation, you have to enclose the connect string with a double quote character. However, to prevent possible security breaches we advice you to stop using the USERID parameter in a parameter file.

Contents of file exp.par:

USERID="sys/change_on_install@instance as sysdba"
TABLES=scott.emp

Run export with:

exp parfile=exp.par


Remarks:

1. If you have setup operating system authentication, it is not necessary to specify the SYS schema name, and password. E.g: exp "'/@instance as sysdba'" tables=scott.emp

2. In addition, if you have set the environment variable TWO_TASK (on Unix) or LOCAL (on Windows) or on the server where the database is installed you have set ORACLE_HOME and ORACLE_SID, it is not necessary to specify the @instance. E.g: exp "'/ as sysdba'" tables=scott.emp

3. The export parameters FLASHBACK_SCN and FLASHBACK_TIME cannot be used if the user that invoked the export is connected AS SYSDBA.

4. Known issues:
Bug 1616035 "EXPORT FAILED WITH ORA-1031 WHEN LOGIN AS SYSDBA" (not a public bug; fixed in 8.1.7.3 and higher)
Bug 2936288 "ORA-1925 OCCURS WHEN IMPORTING AS SYS ACCOUNT"
Bug 2996947 "EXP DID NOT RAISE ERROR WHEN SYSDBA EXPORTS WITH CONSISTENT=Y" (not a public bug; fixed in Oracle10g and higher)

References
Bug 2936288 - Ora-1925 Occurs When Importing As Sys Account
Note 112269.1 - How to set Unix env. variable TWO_TASK and Windows NT counterpart, LOCAL
Note 130332.1 - Export / Import Connecting "AS SYSDBA" Fails with LRM-00108 and EXP-00019
Note 204334.1 - Parameters FLASHBACK_SCN And FLASHBACK_TIME: Point In Time Export
Note 228482.1 - Schema's CTXSYS, MDSYS and ORDSYS are Not Exported
Note 277606.1 - How to Prevent EXP-00079 or EXP-00080 Warning (Data in Table xxx is Protected) During Export


BEA中国

tianhao960收录,使用标签:WebLogic,时间:2008-5-13 20:23:18 | 相关网摘我也收藏

利用这些简单易用的工具,您可以更快地掌握BEA WebLogic Platform 8.1。请了解技术细节,全面评估 BEA WebLogic Platform 8.1。


计算语言学和自然语言处理简介[大家论坛-大家学习网论坛]

tianhao960收录,时间:2008-5-4 20:45:38 | 相关网摘我也收藏

一、从一个例子开始



2001年美国电影《太空奥德赛》中的一段对话:



(Screenplay 0f 2001: A Space Odyssey,Stanley Kubrick & Arthur C. Charke编 )



Dave Bownman: Open the pod bay doors, HAL.



HAL: I’m sorry Dave, I’m afraid I can’t do that.



(Dave Bownman:HAL,请你打开太空舱的分离门。



HAL:对不起, Dave,我不能这样做。)



若想HAL能通过自然语言与人类进行交流,那它就需要一下环节:



u 语音识别 ( speech recognition )



u 自然语言理解 ( natural language understanding )



u 自然语言生成 ( natural language generation )



u 语音合成 ( speech synthesis )



u 信息检索 ( information retrieval )



u 信息抽取 ( information extraction )



u 推理 ( reference )



【科研经验】我就是喜欢看书读文献 - 心理/生物/化学 - 专业资料交流 - 蛋蛋网论坛 北师大论坛 爱师大,爱蛋蛋 - 学习|休闲|交流|生活

tianhao960收录,时间:2008-5-4 19:27:46 | 相关网摘我也收藏

我非常喜欢读文献读书,平时老板到实验室或者办公室来找我,大多数情况都是看到我坐在计算机前面写文章或者看书读文献.我不是很崇拜一天十几个小时都在实验台前面.我强调的是设计好实验,做好实验,并加强个人学术修养,开阔思路,能文能武,走可持续发展的学术之路.在最近一年半里面,我已经出了第一作者科研论文3篇,第一作者综述3篇,第二作者科研论文3篇,还有其它的正在写.我是怎么样学习文献的呢?


Knowledge Interchange Format (KIF)

tianhao960收录,使用标签:KIF,时间:2008-5-4 10:45:33 | 相关网摘我也收藏

Knowledge Interchange Format (KIF)


排序

tianhao960收录,使用标签:算法,时间:2008-4-30 17:06:08 | 相关网摘我也收藏

排序(sorting)是计算机程序设计中的一种重要运算,它的功能是将一个数据元素(或记录)的任意序,重新排列成一个按关键字有序的序列。


排序方法分为两大类: 内部排序 外部排序

为了便于讨论,在此首先要对排序下一个确切的定义:


  假设含n个记录的序列为{R1,R2,…,Rn}其相应的关键字序列为 {K1,K2,…,Kn}需确定1,2,…,n的一排列p1,p2,…,pn,使其相应的关键字满足如下的非递减(或非递增)关系
Kp1<=Kp2<=…<=Kpn使式(10-1)的序列成为 一个按关键字有序的序列{Rp1,Rp2,…,Rpn}这样一种操作称为排序。


中文搜索引擎技术揭密 - MULAN的文字 - CSDNBlog

tianhao960收录,使用标签:Search,时间:2008-4-27 11:05:35 | 相关网摘我也收藏

互联网在近10年的得到飞速发展,互联网正在逐渐深入人们的生活,改变人们的生活。互联网经济也经历了风风雨雨,从缓慢起步到急速膨胀,从泡沫破灭到逐步回暖;从“网络广告”到“拇指经济”,从“网络游戏”到“搜索力经济”。目前,搜索引擎成为最受人们关注的焦点之一,也成为亿万富翁的制造摇篮。越来越多的公司都希望在搜索引擎这座金矿中挖到筐金子,其中许多人会选择拥有自己的搜索引擎。国内著名搜索引擎公司百度(http://www.baidu.com/)总裁李彦宏说:搜索引擎不是人人都能做的领域,进入的门槛比较高。


The Anatomy of a Large-Scale Hypertextual Web Search Engine_路在何方?

tianhao960收录,使用标签:Search,时间:2008-4-27 10:59:29 | 相关网摘我也收藏

1 绪论
Web 给信息检索带来了新的挑战。Web上的信息量快速增长,同时不断有毫无经验的新用户来体验Web这门艺术。人们喜欢用超级链接来网上冲浪,通常都以象 Yahoo这样重要的网页或搜索引擎开始。大家认为List(目录)有效地包含了大家感兴趣的主题,但是它具有主观性,建立和维护的代价高,升级慢,不能包括所有深奥的主题。基于关键词的自动搜索引擎通常返回太多的低质量的匹配。使问题更遭的是,一些广告为了赢得人们的关注想方设法误导自动搜索引擎。

我们建立了一个大型搜索引擎解决了现有系统中的很多问题。应用超文本结构,大大提高了查询质量。我们的系统命名为google,取名自googol的通俗拼法,即10的100次方,这和我们的目标建立一个大型搜索引擎不谋而合。

1.1网络搜索引擎—升级换代(scaling up):


google搜索引擎的参考文献_路在何方?

tianhao960收录,使用标签:Search,时间:2008-4-27 10:58:40 | 相关网摘我也收藏

Best of the Web 1994 -- Navigators http://botw.org/1994/awards/navigators.html
Bill Clinton Joke of the Day: April 14, 1997. http://www.io.com/~cjburke/clinton/970414.html.
Bzip2 Homepage http://www.muraroa.demon.co.uk/
Google Search Engine http://google.stanford.edu/
Harvest http://harvest.transarc.com/
Mauldin, Michael L. Lycos Design Choices in an Internet Search Service, IEEE Expert Interview http://www.computer.org/pubs/expert/1997/trends/x1008/mauldin.htm
The Effect of Cellular Phone Use Upon Driver Attention http://www.webfirst.com/aaa/text/cell/cell0toc.htm
Search Engine Watch http://www.searchenginewatch.com/
RFC 1950 (zlib) ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html
Robots Exclusion Protocol: http://info.webcrawler.com/mak/projects/robots/exclusion.htm
Web Growth Summary: http://www.mit.edu/people/mkgray/net/web-growth-summary.html
Yahoo! http://www.yahoo.com/


凌风阁文章资源 --- 学习搜索技术的网站

tianhao960收录,使用标签:search,时间:2008-4-27 10:48:22 | 相关网摘我也收藏

1 加州伯克利分校图书馆的搜索教程
首页:http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/FindInfo.html
基本策略:http://www.lib.berkeley.edu/TeachingLib/Guides/Internet/FindInfo.html
----------很多著名大学图书馆都有做教搜索的主页,加州伯克利过去半年进步很大,在网上所有免费搜索教程中,已可稳居第一。特点是偏学术化,学生及专业人士更适用。对搜索基本策略的把握很出色,但对搜索引擎的了解与使用不够。


ADO,OLEDB,ODBC,DAO,RDO的区别 - 蓝白色的7号 - DonewsBlog

tianhao960收录,使用标签:Database,时间:2008-4-13 15:06:36 | 相关网摘我也收藏

ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。---出现的最早,但不总是万能。

DAO:数据访问对象是用来显露了Microsoft Jet数据库引擎(最早是给Microsoft Access 所使用,现在已经支持其它数据库),并允许开发者通过ODBC直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或在小范围本地分布使用。其内部已经对Jet数据库的访问进行了加速优化,而且其使用起来也是很方便的。所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式---应用的专一性


[转]2007论坛上最经典的71句话,不但经典而且有道理

tianhao960收录,时间:2008-4-12 19:35:54 | 相关网摘我也收藏

1、这个世界上我只相信两个人,一个是我,另一个不是你。

  2、生活真好玩,因为生活老他妈玩我。

  3、好好学习,天天想上!

  4、花前月下,不如花钱“日”下。

  5、爱情就是犯*,而且还是一次又一次的犯*。什么时候你不犯*了,女人就来了!

  6、叶子的离开,是因为风的追求还是树的不挽留?


一个简略地浏览器 - 完全教程网,我们只有教程!

tianhao960收录,使用标签:vc,时间:2008-4-11 10:38:23 | 相关网摘我也收藏

本文将在VC++ 5.0环境下介绍一个基于 Winsock 的 HTTP 客户应用程序。读者可以基于本例同样的原理实现其他Internet常用协议(time、 SMTP、 POP3、Telnet、 FTP 等)的客户应用程序。
本篇教程来源于 完全教程网 原文链接:http://www.pcstu.com/program/C__/jq/20070213/27266.html


MFC Controls - Rich Edit

tianhao960收录,使用标签:mfc,时间:2008-4-10 15:55:08 | 相关网摘我也收藏

A rich edit control is a Windows object that resembles an edit box but can handle text that is formatted. This mean that it can display text with various characters formats and can show paragraphs with different alignments. A rich edit control can also allow a user to change the formatting on characters and control the alignment of paragraphs.


微软首席预言家:并行计算将成未来重点 , 穆迪,微软,并行计算,计算,处理器,首席,并行,技术,计算机,软件, , - CSDN 新闻

tianhao960收录,使用标签:并行计算,时间:2008-4-10 10:17:21 | 相关网摘我也收藏

北京时间3月13日消息,据国外媒体报道,微软首席研究和战略官克莱格.穆迪(Craig Mundie)确信,他可以很好地把握科技的发展方向,但时间则是另外一个问题。穆迪2006年接替微软联合创始人比尔.盖茨,成为了微软首席预言家。最近几年来,并行计算吸引了业界的高度关注,被认为是下一个重大技术进展。并行计算第一步。


计算机科学与技术学习反思录

tianhao960收录,时间:2008-4-9 21:07:28 | 相关网摘我也收藏

1.本文集众前辈及恩师之经验于一文,由我执笔总结前辈所感而已。并非尽我所言,特别说明基于南京大学网友sir《胡侃理论计算机》一文并融入我的若干观点。
  
  2.本文虽经多次修订,仍有诸多不妥之处,有待笔者进一步学习之后修订此文,文章侧重理论学习兼谈实践,望读者各取所需。
  
  3. 本文早期版本曾流传于其它网站,本文会不断融入作者最新的学习感受,最终版本将只在此处保持最新更新,请读者注意此文修改中的若干重要思想变动。


Java中汉字问题的分析及解决

tianhao960收录,使用标签:Java,时间:2007-10-2 15:39:43 | 相关网摘我也收藏

来源:天极Yesky

  在基于 Java 语言的编程中,我们经常碰到汉字的处理及显示的问题。一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢?Java语言默认的编码方式是UNICODE,而我们中国人通常使用的文件和数据库都是基于GB2312或者BIG5等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢?本文将从汉字编码的常识入手,结合Java编程实例,分析以上两个问题并提出解决它们的方案。

  现在 Java 编程语言已经广泛应用于互联网世界,早在 Sun 公司开发 Java 语言的时候,就已经考虑到对非英文字符的支持了。Sun 公司公布的 Java 运行环境(JRE)本身就分英文版和国际版,但只有国际版才支持非英文字符。不过在 Java 编程语言的应用中,对中文字符的支持并非如同 Java Soft 的标准规范中所宣称的那样完美,因为中文字符集不只一个,而且不同的操作系统对中文字符的支持也不尽相同,所以会有许多和汉字编码处理有关的问题在我们进行应用开发中困扰着我们。有很多关于这些问题的解答,但都比较琐碎,并不能够满足大家迫切解决问题的愿望,关于 Java 中文问题的系统研究并不多,本文从汉字编码常识出发,分析 Java 中文问题,希望对大家解决这个问题有所帮助。

  汉字编码的常识

  我们知道,英文字符一般是以一个字节来表示的,最常用的编码方法是 ASCII 。但一个字节最多只能区分256个字符,而汉字成千上万,所以现在都以双字节来表示汉字,为了能够与英文字符分开,每个字节的最高位一定为1,这样双字节最多可以表示64K格字符。我们经常碰到的编码方式有 GB2312、BIG5、UNICODE 等。关于具体编码方式的详细资料,有兴趣的读者可以查阅相关资料。我肤浅谈一下和我们关系密切的 GB2312 和 UNICODE。GB2312 码,中华人民共和国国家标准汉字信息交换用编码,是一个由中华人民共和国国家标准总局发布的关于简化汉字的编码,通行于中国大陆地区及新加坡,简称国标码。两个字节中,第一个字节(高字节)的值为区号值加32(20H),第二个字节(低字节)的值为位号值加32(20H),用这两个值来表示一个汉字的编码。UNICODE 码是微软提出的解决多国字符问题的多字节等长编码,它对英文字符采取前面加“0”字节的策略实现等长兼容。如 “A” 的 ASCII 码为0x41,UNICODE 就为0x00,0x41。利用特殊的工具各种编码之间可以互相转换。

  Java 中文问题的初步认识

  我们基于 Java 编程语言进行应用开发时,不可避免地要处理中文。Java 编程语言默认的编码方式是 UNICODE,而我们通常使用的数据库及文件都是基于 GB2312 编码的,我们经常碰到这样的情况:浏览基于 JSP 技术的网站看到的是乱码,文件打开后看到的也是乱码,被 Java 修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。

String sEnglish = “apple”;

String sChinese = “苹果”;

String s = “苹果 apple ”;

  sEnglish 的长度是5,sChinese的长度是4,而 s 默认的长度是14。对于 sEnglish来说, Java 中的各个类都支持得非常好,肯定能够正确显示。但对于 sChinese 和 s 来说,虽然 Java Soft 声明 Java 的基本类已经考虑到对多国字符的支持(默认 UNICODE 编码),但是如果操作系统的默认编码不是 UNICODE ,而是国标码等。从 Java 源代码到得到正确的结果,要经过 “Java 源代码-> Java 字节码-> ;虚拟机->操作系统->显示设备”的过程。在上述过程中的每一步骤,我们都必须正确地处理汉字的编码,才能够使最终的显示结果正确。

  “ Java 源代码-> Java 字节码”,标准的 Java 编译器 javac 使用的字符集是系统默认的字符集,比如在中文 Windows 操作系统上就是 GBK ,而在 Linux 操作系统上就是ISO-8859-1,所以大家会发现在 Linux 操作系统上编译的类中源文件中的中文字符都出了问题,解决的办法就是在编译的时候添加 encoding 参数,这样才能够与平台无关。用法是

  javac ?Cencoding GBK。

  “ Java 字节码->虚拟机->操作系统”, Java 运行环境 (JRE) 分英文版和国际版,但只有国际版才支持非英文字符。 Java 开发工具包 (JDK) 肯定支持多国字符,但并非所有的计算机用户都安装了 JDK 。很多操作系统及应用软件为了能够更好的支持 Java ,都内嵌了 JRE 的国际版本,为自己支持多国字符提供了方便。

  “操作系统->显示设备”,对于汉字来说,操作系统必须支持并能够显示它。英文操作系统如果不搭配特殊的应用软件的话,是肯定不能够显示中文的。

  还有一个问题,就是在 Java 编程过程中,对中文字符进行正确的编码转换。例如,向网页输出中文字符串的时候,不论你是用

out.println(string);

  还是用<%=string%>,都必须作 UNICODE 到 GBK 的转换,或者手动,或者自动。在 JSP 1.0中,可以定义输出字符集,从而实现内码的自动转换。用法是

<%@page contentType=”text/html;charset=gb2312” %>

  但是在一些 JSP 版本中并没有提供对输出字符集的支持,(例如 JSP 0.92),这就需要手动编码输出了,方法非常多。最常用的方法是

String s1 = request.getParameter(“keyword”);

String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);

  getBytes 方法用于将中文字符以“ISO-8859-1”编码方式转化成字节数组,而“GBK” 是目标编码方式。我们从以ISO-8859-1方式编码的数据库中读出中文字符串 s1 ,经过上述转换过程,在支持 GBK 字符集的操作系统和应用软件中就能够正确显示中文字符串 s2 。

  Java 中文问题的表层分析及处理

背景
开发环境 JDK1.15 Vcafe2.0 JPadPro
服务器端 NT IIS Sybase System Jconnect(JDBC)
客户端 IE5.0 Pwin98

  .CLASS 文件存放在服务器端,由客户端的浏览器运行 APPLET , APPLET 只起调入 FRAME 类等主程序的作用。界面包括 Textfield ,TextArea,List,Choice 等。

  I.用 JDBC 执行 SELECT 语句从服务器端读取数据(中文)后,将数据用 APPEND 方法加到 TextArea(TA) ,不能正确显示。但加到 List 中时,大部分汉字却可正确显示。

  将数据按“ISO-8859-1” 编码方式转化为字节数组,再按系统缺省编码方式 (Default Character Encoding) 转化为 STRING ,即可在 TA 和 List 中正确显示。

  程序段如下:

dbstr2 = results.getString(1);
//After reading the result from DB server,converting it to string.
dbbyte1 = dbstr2.getBytes(“iso-8859-1”);
dbstr1 = new String(dbbyte1);

  在转换字符串时不采用系统默认编码方式,而直接采用“ GBK” 或者 “GB2312” ,在 A 和 B 两种情况下,从数据库取数据都没有问题。

  II.处理方式与“取中文”相逆,先将 SQL 语句按系统缺省编码方式转化为字节数组,再按“ISO-8859-1”编码方式转化为 STRING ,最后送去执行,则中文信息可正确写入数据库。

  程序段如下:

sqlstmt = tf_input.getText();
//Before sending statement to DB server,converting it to sql statement.
dbbyte1 = sqlstmt.getBytes();
sqlstmt = newString(dbbyte1,”iso-8859-1”);
_stmt = _con.createStatement();
_stmt.executeUpdate(sqlstmt);
……

  问题:如果客户机上存在 CLASSPATH 指向 JDK 的 CLASSES.ZIP 时(称为 A 情况),上述程序代码可正确执行。但是如果客户机只有浏览器,而没有 JDK 和 CLASSPATH 时(称为 B 情况),则汉字无法正确转换。

  我们的分析:

  1.经过测试,在 A 情况下,程序运行时系统的缺省编码方式为 GBK 或者 GB2312 。在 B 情况下,程序启动时浏览器的 JAVA 控制台中出现如下错误信息:

  Can't find resource for sun.awt.windows.awtLocalization_zh_CN

  然后系统的缺省编码方式为“8859-1”。

  2.如果在转换字符串时不采用系统缺省编码方式,而是直接采用 “GBK” 或“GB2312”,则在 A 情况下程序仍然可正常运行,在 B 情况下,系统出现错误:

UnsupportedEncodingException。

  3.在客户机上,把 JDK 的 CLASSES.ZIP 解压后,放在另一个目录中, CLASSPATH 只包含该目录。然后一边逐步删除该目录中的 .CLASS 文件,另一边运行测试程序,最后发现在一千多个 CLASS 文件中,只有一个是必不可少的,该文件是:

sun.io.CharToByteDoubleByte.class。

  将该文件拷到服务器端和其它的类放在一起,并在程序的开头 IMPORT 它,在 B 情况下程序仍然无法正常运行。

  4.在 A 情况下,如果在 CLASSPTH 中去掉 sun.io.CharToByteDoubleByte.class ,则程序运行时测得默认编码方式为“8859-1”,否则为 “GBK” 或 “GB2312” 。

  如果 JDK 的版本为1.2以上的话,在 B 情况下遇到的问题得到了很好的解决,测试的步骤同上,有兴趣的读者可以尝试一下。

  Java 中文问题的根源分析及解决

  在简体中文 MS Windows 98 + JDK 1.3 下,可以用 System.getProperties() 得到 Java 运行环境的一些基本属性,类 PoorChinese 可以帮助我们得到这些属性。

  类 PoorChinese 的源代码:

  public class PoorChinese {}

  执行 java PoorChinese 后,我们会得到:

  系统变量 file.encoding 的值为 GBK ,user.language 的值为 zh , user.region 的值为 CN ,这些系统变量的值决定了系统默认的编码方式是 GBK 。

  在上述系统中,下面的代码将 GB2312 文件转换成 Big5 文件,它们能够帮助我们理解 Java 中汉字编码的转化:

import java.io.*;
import java.util.*;
public class gb2big5
{
 static int iCharNum=0;
 public static void main(String[] args) {
  System.out.println("Input GB2312 file, output Big5 file.");
  if (args.length!=2)
  {
   System.err.println("Usage: jview gb2big5 gbfile big5file");
   System.exit(1);
   String inputString = readInput(args[0]);
   writeOutput(inputString,args[1]);
   System.out.println("Number of Characters in file: "+iCharNum+".");
  }
  static void writeOutput(String str, String strOutFile)
  {
   try
   {
    FileOutputStream fos = new FileOutputStream(strOutFile);
    Writer out = new OutputStreamWriter(fos, "Big5");
    out.write(str);
    out.close();
   }
   catch (IOException e)
   {
    e.printStackTrace();
    e.printStackTrace();
   }
  }
  static String readInput(String strInFile)
  {
   StringBuffer buffer = new StringBuffer();
   try
   {
    FileInputStream fis = new FileInputStream(strInFile);
    InputStreamReader isr = new InputStreamReader(fis, "GB2312");
    Reader in = new BufferedReader(isr);
    int ch;
    while ((ch = in.read()) > -1)
    {
     iCharNum += 1;buffer.append((char)ch);
    }
    in.close();
    return buffer.toString();
   }
   catch (IOException e)
   {
    e.printStackTrace();
    return null;
   }
  }
 }

  编码转化的过程如下:

  GB2312------------------>Unicode------------->Big5

  执行 java gb2big5 gb.txt big5.txt ,如果 gb.txt 的内容是“今天星期三”,则得到的文件 big5.txt 中的字符能够正确显示;而如果 gb.txt 的内容是“情人节快乐”,则得到的文件 big5.txt 中对应于“节”和“乐”的字符都是符号“?”(0x3F),可见 sun.io.ByteToCharGB2312 和 sun.io.CharToByteBig5 这两个基本类并没有编好。

  正如上例一样, Java 的基本类也可能存在问题。由于国际化的工作并不是在国内完成的,所以在这些基本类发布之前,没有经过严格的测试,所以对中文字符的支持并不像 Java Soft 所声称的那样完美。前不久,我的一位技术上的朋友发信给我说,他终于找到了 Java Servlet 中文问题的根源。两周以来,他一直为 Java Servlet 的中文问题所困扰,因为每面对一个含有中文字符的字符串都必须进行强制转换才能够得到正确的结果(这好象是大家公认的唯一的解决办法)。

  后来,他确实不想如此继续安分下去了,因为这样的事情确实不应该是高级程序员所要做的工作,他就找出 Servlet 解码的源代码进行分析,因为他怀疑问题就出在解码这部分。经过四个小时的奋斗,他终于找到了问题的根源所在。原来他的怀疑是正确的, Servlet 的解码部分完全没有考虑双字节,直接把 %XX 当作一个字符。(原来 Java Soft 也会犯这幺低级的错误!)

  如果你对这个问题有兴趣或者遇到了同样的烦恼的话,你可以按照他的步骤 对Servlet.jar 进行修改:

  找到源代码 HttpUtils 中的 static private String parseName ,在返回前将 sb(StringBuffer) 复制成 byte bs[] ,然后 return new String(bs,”GB2312”)。作上述修改后就需要自己解码了:

HashTable form=HttpUtils .parseQueryString(request.getQueryString())或者

form=HttpUtils.parsePostData(……)

  千万别忘了编译后放到 Servlet.jar 里面。

  关于 Java 中文问题的总结

  Java 编程语言成长于网络世界,这就要求 Java 对多国字符有很好的支持。 Java 编程语言适应了计算的网络化的需求,为它能够在网络世界迅速成长奠定了坚实的基础。 Java 的缔造者 (Java Soft) 已经考虑到 Java 编程语言对多国字符的支持,只是现在的解决方案有很多缺陷在里面,需要我们付诸一些补偿性的措施。而世界标准化组织也在努力把人类所有的文字统一在一种编码之中,其中一种方案是 ISO10646 ,它用四个字节来表示一个字符。当然,在这种方案未被采用之前,还是希望 Java Soft 能够严格地测试它的产品,为用户带来更多的方便。

  附一个用于从数据库和网络中取出 中文乱码的处理函数,入参是有问题的字符串,出参是问题已经解决了的字符串。



共453个网摘 [ 1  2  3  4  5  6 ... 16 ]  下一页

tianhao960/相关标签



网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
Copyright © 2000-2008, CSDN.NET, All Rights Reserved