Ant编译出现乱码问题解决

最近几天碰到一个Ant编译后,出现乱码的问题,纠结了几天,目前应该算是解决了。事情是这样,手头有一个java的工程,由于是在windows下开发的,所以源码的编码格式均为gbk,之前工程的编译都是在windows环境下进行,所以一直也没有问题。最近由于环境管控需要(《在Linux下的用户特殊操作权限控制》),尝试在Linux环境下进行自动编译和部署,因此就出现了编译出来的应用有乱码的问题,查了几个地方,已确定是ant的javac和copy指令的参数配置问题,在这里把过程中学习到的知识记录一下。

首先是Java的编译和运行机制,从.java编译为.class的过程中,javac会默认按照编译所在操作系统的默认编码读取源代码,并编译成内部为UTF-8编码的.class,而在java虚拟机执行的过程中,会按照程序运行所在操作系统的默认编码,将UTF-8编码再次进行转换。通过这种两次转换的方式,Java实现了对多语言的支持。 Continue reading

使用iconv批量转换文件编码(linux&windows)

Linux环境下,在需要转换的目录下输入:

touch iconv.tmp && find . -iname “*.java” \
-exec iconv -f gbk -t utf-8 ‘{}’ -o iconv.tmp \; \
-exec mv iconv.tmp ‘{}’ \;

Windows环境下,在需要转换的目录下,执行放置iconv.exe程序,并执行如下bat脚本即可(点此下载程序包iconv(bat+exe)):

@ECHO OFF
FOR /R %%F IN (*.java) DO (
echo %%~nxF
iconv.exe -f GBK -t UTF-8 %%F > %%F.utf8
move %%F.utf8 %%F >nul
)
PAUSE

本文参考了以下两篇文章,感谢作者的分享:

龙龙诞生过程全记录

龙龙的预产期是11月14日,龙龙妈早就迫不及待地在日历上打了圈,还写上“龙龙出生啦!”

image

14日凌晨4点多,被蚊子吵醒的龙爸龙妈还在犹豫是否起来消灭蚊子的时候,龙龙妈突然发现自己破水了,赶紧通知龙龙的爷爷奶奶外公外婆,大家一起赶往医院。(龙龙爸在这关键时候,竟然还不忘洗头剃胡子再出门@_@)

Continue reading

写在龙龙出生之前

转眼已经步入了11月,经过38周漫长的等待,龙龙,这个月我们就能见面了。

待产包已经基本准备就绪了,龙龙妈一包,龙龙也有一包,我们随时都准备你的降临。

家里也准备妥当,龙龙妈精心挑选了各式衣服、装扮,龙龙爸也采购了许多用品、玩具,我们都等着与你一同成长。

大家都在猜测,龙龙你是男是女,现在差不多是1比1哦,就等着你来到我们身边给大家惊喜咯:)

希望接下来的一个月,顺顺利利,平平安安。

龙龙,我们等着你!

Apache版本不同导致的RewriteRule语法不同

最近在利用.htaccess设置RewriteRule时发现,\d及\w语法无法支持,就此咨询了ICDSoft的客服,答复在Apache1.3环境下,是不支持\d和\w的。自己搜了一下网上的其他文章,发现\d可以使用[0-9]+来代替,\w可以.+来临时代替,就先这么解决问题了。

客服也反馈说在今年年底前,ICDSoft会完成所有服务器升级到Apache2.4,到时候就没有这个问题了。

在Linux下的用户特殊操作权限控制

需求背景如下:希望确保开发人员从SVN提取代码进行部署,而不是从本机上传程序,但因为要允许开发人员自行启停服务,所以变更用户需提供给开发人员,因此问题就是如何对变更用户进行控制,不允许进行除编译部署及启停服务的其他操作。

因此进行了如下考虑:

  1. 用户登录时就加载shell脚本
  2. 脚本不允许通过Ctrl+C中断结束
  3. 脚本退出时自动断开当前登录,自动登出
  4. 脚本通过密码或其他认证可以回到正常命令行
  5. 阻止用户通过FTP方式登录进行文件修改
  6. 阻止用户通过SFTP方式登录进行文件修改

可以通过以下配置达到这些效果(登录使用bash,FTP使用vsftp,所以使用其他shell或FTP的话,需根据实际情况进行调整): Continue reading

使用awk进行文本筛选和排序

今天碰到这样一个需求:“有一个竖线分隔的多列多行文本,需要显示某几列,并按指定顺序显示”,研究了好久,终于给折腾出来了,awk果然是相当强大。

awk ‘{FS=”|”}{OFS=”|”}{print $5,$4,$1}’ 20100109.txt | sed ‘$s/|//g’

其中用到的awk参数的用途如下:

FS:指定输入文件的分隔符。
OFS:指定输出时的分隔符。
%5,$4,$1:依次显示原文件中的第5、第4、第1列。

因为输入文件的最后一行是一行减号(-),前面用awk以后会在后面加好几个竖线(|),所以用sed把竖线(|)去除

sed ‘$s/|//g’

“$”指最后一行;“s/|//g”指替换竖线(|)为空,s是搜索,g是替换

Oracle下查看表的索引信息

平时用惯了PLSQL之类可视化界面的数据库工具,结果到了纯命令行时,一些平时很简单的查询反而很困难了,比如查看某个表的索引信息。因此在此进行个记录,备忘一下。在sqlplus字符界面下,使用如下语句即可,表名请自行替换。

select user_ind_columns.index_name,
user_ind_columns.column_name,
user_ind_columns.column_position,
user_indexes.uniqueness
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = ‘表名’;

ICDSoft空间对Zend Optimizer的支持情况介绍

最近用的网页程序,有使用到Zend Optimizer,结果放到ICDSoft空间后,发现并不支持,因此就此咨询了客服,答复默认不支持,但可以进行配置(可直接看本文最后的设置方法)。为此我也再查询了一些资料,把信息汇总在此,希望对大家有所帮助。

Zend Optimizer的最新版本为3.3.3,最高只支持至PHP5.2,且Zend官方已不再进行更新,在PHP5.3环境下,只能使用ZendGuardLoader,但由于ZendGuardLoader只支持使用Zend Guard 5.5以后加密的代码,所以如果网页程序没法升级的话,只能变通使用PHP5.2了。ICDSoft的解决办法也是基于这个方法。

ICDSoft空间目前同时支持PHP5.2和PHP5.3,默认是采用PHP5.3进行解析,可通过配置.htaccess文件,设置为使用PHP5.2进行解析:

AddHandler application/x-httpd-php52 .php

为了在ICDSoft上加载Zend Optimizer,还需修改php.ini文件,添加如下配置: Continue reading