现象:做字符串比较、包含相关的操作无法得到正确的结果。

解决方法:

  • 检查当前操作系统的语言设置
    • 使用locale命令来查询当前的语言环境
  • 设置Language Pack的语言环境。
    • 前面安装Domino的过程我就不说了。安装完Domino之后,还需要安装Language Pack。在LP的readme.txt文件中,注明了各种操作系统下面需要使用的语言和字符集,以Linux为例,需要设置为zh_CN.GB2312。
    • 操作如下:

LANG=zh_CN.GB2312
LC_ALL=zh_CN.GB2312
export LANG
export LC_ALL

  • 安装Language Pack
    • 运行install来进行安装,在安装过程中注意选择中文。
  • 设置notes用户的语言环境
    • Domino不能用root账号来启动,必须使用notes(安装Domino时候设置的账号)来进行启动。由于我们设置了当前的语言为中文,采用GB2312的字符集。所以该notes用户的语言环境也需要设置为zh_CN.GB2312
  • 修改profile文件
    • 到domino运行账号(notes)的home目录下去(/home/notes),然后编辑.bash_profile文件,添加如下行

LANG=zh_CN.GB2312
LC_ALL=zh_CN.GB2312
export LANG
export LC_ALL
然后重新使用该账号登录系统,启动domino即可!

我们一般使用“date -s”命令来修改系统时间。比如将系统时间设定成1996年6月10日的命令如下。

#date -s 06/10/96
将系统时间设定成下午1点12分0秒的命令如下。
#date -s 13:12:00

注意,这里说的是系统时间,是linux由操作系统维护的。
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。如果要确保修改生效可以执行如下命令。

#clock -w

这个命令强制把系统时间写入CMOS

在国华项目中曾经遇到这样一个问题:

需要将OA系统中完整的发文处理单导入到档案系统中。考虑到OA系统中的处理单并不是独立存在的,而是文档的数据+表单的样式,决定将样式写死在代理中,然后用文档数据填充。

这样难点就在于怎样把其中的手写批示图片文件传输过去,经过分析发现MS的MHT格式恰好能满足这个要求,他将网页相关的所有文件都存在一个文件里,其中图片等二进制文件采用Base64编码存储。
我们使用Ls将手写批示图片剥离到服务器的临时目录,再进行Base64编码,与处理单的HTML保存在一个MHT文件中。至此,问题得到了解决。

此处有一个高性能的实现,处理大文件每秒几MB。

浏览器的请求的地址在交给服务器前会对其进行编码,像空格、%、汉字都会被编码成%XX的格式,我们在服务器端如果要取得原来的字符就要进行解码。

Domino提供了一个query_string_decoded域用来获得解码过的字符,但是在使用中发现有些字符通过这个域无法获得(我遇到的是“砚”字,听说还有其他字也获取不到)。

解决方法是用query_string获得未解码的字符,在用一个函数自己来解码。下面就是一个解码函数,在国华项目中使用没有问题。

继续阅读