月度归档:2014年12月

搜狗输入法输入希腊字母

右键 > 设置属性 > 高级 > 自定义短语设置 > 直接编辑配置文件,将如下内容保存,然后就可以输入希腊字母了。

alpha,4=α
alpha,5=Α
beta,4=β
beta,5=Β
gamma,4=γ
gamma,5=Γ
delta,4=δ
delta,5=Δ
epsilon,4=ε
epsilon,5=Ε
zeta,4=ζ
zeta,5=Ζ
eta,4=η
eta,5=Η
theta,4=θ
theta,5=Θ
iota,4=ι
iota,5=Ι
kappa,4=κ
kappa,5=Κ
lambda,4=λ
lambda,5=Λ
mu,4=μ
mu,5=Μ
nu,4=ν
nu,5=Ν
xi,4=ξ
xi,5=Ξ
omicron,4=ο
omicron,5=Ο
pi,4=π
pi,5=Π
rho,4=ρ
rho,5=Ρ
sigma,4=σ
sigma,5=Σ
tau,4=τ
tau,5=Τ
upsilon,4=υ
upsilon,5=Υ
phi,4=φ
phi,5=Φ
chi,4=χ
chi,5=Χ
psi,4=ψ
psi,5=Ψ
omega,4=ω
omega,5=Ω

WordPress中使用CSS高亮HTML的code标签

Markdown中的Code标签

在Markdown中,用一对`来表示html中的code标签。例如`this is a code`会被翻译成<code>this is a code</code>。而通过查看WordPress中的很多主题,发现很多主题把code标签取消了高亮显示。

解决

WordPress对应的版本是4.1,其他版本操作可能有出入,进入后台后:外观 > 编辑,然后在新出现的编辑窗口加入如下代码并保存,位置不限。设置好后,就会拥有和本站一样的代码高亮效果。需要注意的是,若以后对主题进行升级,还需要再次重复这些操作。

/*样式只对`class=entry-content`的`code`标签有效,即正文部分*/
.entry-content code {
border:1px solid #EAEAEA;
background-color:#F8F8F8;
padding:2px;
margin:2px;
/* 圆角效果 */
border-radius:4px;
/* 不自动换行 */
white-space:nowrap;
}

BOM文件在Java中的读取问题

BOM问题

最近在开发一个项目,需要导入文本文件。用Java在导入的过程中,使用了InputStreamReader(InputStream,'utf-8')来读取,没有问题。

但是,导入的数据,在用HashMap的时候出现了问题,即文件的第一行数据在HashMap中表现不正常。出现的问题是,明明文字看起来是一样的,但是在HashMap中却不能识别,即两个String,表面看起来一样,但.hashCode()返回的结果不同。这时候我想到了会不会BOM影响的,结果真的是。

具体表现为我用上面这种方法读取的的文本,第一行带有EF BB BF。那么好了,问题就到了如何正确的读取BOM文件。

EmEditor查看16进制

一直在用EmEditor,EmEditor查看2进制(即16进制)的方法是:File文件 > Reload重新载入 > Binary (Hex View)二进制(十六进制)视图

Java解决BOM问题

使用一个自定义的类UnicodeReader,这个类的来源是http://koti.mbnet.fi/akini/java/unicodereader/

FileInputStream fis = new FileInputStream(file);
UnicodeReader ur = new UnicodeReader(fis, "utf-8");
BufferedReader br = new BufferedReader(ur);

这个类的代码如下

/**
 * 
 * 
 version: 1.1 / 2007-01-25
 - changed BOM recognition ordering (longer boms first)

 Original pseudocode   : Thomas Weidenfeller
 Implementation tweaked: Aki Nieminen

 http://www.unicode.org/unicode/faq/utf_bom.html
 BOMs:
 00 00 FE FF    = UTF-32, big-endian
 FF FE 00 00    = UTF-32, little-endian
 EF BB BF       = UTF-8,
 FE FF          = UTF-16, big-endian
 FF FE          = UTF-16, little-endian

 Win2k Notepad:
 Unicode format = UTF-16LE
 ***/

import java.io.*;

/**
 * Generic unicode textreader, which will use BOM mark to identify the encoding
 * to be used. If BOM is not found then use a given default or system encoding.
 */
public class UnicodeReader extends Reader {
	PushbackInputStream internalIn;
	InputStreamReader internalIn2 = null;
	String defaultEnc;

	private static final int BOM_SIZE = 4;

	/**
	 * 
	 * @param in
	 *            inputstream to be read
	 * @param defaultEnc
	 *            default encoding if stream does not have BOM marker. Give NULL
	 *            to use system-level default.
	 */
	UnicodeReader(InputStream in, String defaultEnc) {
		internalIn = new PushbackInputStream(in, BOM_SIZE);
		this.defaultEnc = defaultEnc;
	}

	public String getDefaultEncoding() {
		return defaultEnc;
	}

	/**
	 * Get stream encoding or NULL if stream is uninitialized. Call init() or
	 * read() method to initialize it.
	 */
	public String getEncoding() {
		if (internalIn2 == null)
			return null;
		return internalIn2.getEncoding();
	}

	/**
	 * Read-ahead four bytes and check for BOM marks. Extra bytes are unread
	 * back to the stream, only BOM bytes are skipped.
	 */
	protected void init() throws IOException {
		if (internalIn2 != null)
			return;

		String encoding;
		byte bom[] = new byte[BOM_SIZE];
		int n, unread;
		n = internalIn.read(bom, 0, bom.length);

		if ((bom[0] == (byte) 0x00) && (bom[1] == (byte) 0x00)
				&& (bom[2] == (byte) 0xFE) && (bom[3] == (byte) 0xFF)) {
			encoding = "UTF-32BE";
			unread = n - 4;
		} else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)
				&& (bom[2] == (byte) 0x00) && (bom[3] == (byte) 0x00)) {
			encoding = "UTF-32LE";
			unread = n - 4;
		} else if ((bom[0] == (byte) 0xEF) && (bom[1] == (byte) 0xBB)
				&& (bom[2] == (byte) 0xBF)) {
			encoding = "UTF-8";
			unread = n - 3;
		} else if ((bom[0] == (byte) 0xFE) && (bom[1] == (byte) 0xFF)) {
			encoding = "UTF-16BE";
			unread = n - 2;
		} else if ((bom[0] == (byte) 0xFF) && (bom[1] == (byte) 0xFE)) {
			encoding = "UTF-16LE";
			unread = n - 2;
		} else {
			// Unicode BOM mark not found, unread all bytes
			encoding = defaultEnc;
			unread = n;
		}
		// System.out.println("read=" + n + ", unread=" + unread);

		if (unread > 0)
			internalIn.unread(bom, (n - unread), unread);

		// Use given encoding
		if (encoding == null) {
			internalIn2 = new InputStreamReader(internalIn);
		} else {
			internalIn2 = new InputStreamReader(internalIn, encoding);
		}
	}

	public void close() throws IOException {
		init();
		internalIn2.close();
	}

	public int read(char[] cbuf, int off, int len) throws IOException {
		init();
		return internalIn2.read(cbuf, off, len);
	}

}

Pajek中文乱码问题

最近一直在使用Sublime Text,但是处理好的数据导入Pajek后中文变成乱码。最后没有在Sublime Text上找到解决方案,而是通过如下方法解决的:
将Sublime Text中的文本复制,打开记事本(Ctrl+R然后输入notepad回车),粘贴文本并保存,在保存的时候编码选择ANSI。

影响因子怎么查?

The impact factor (IF) of an academic journal is a measure reflecting the average number of citations to recent articles published in that journal. It is frequently used as a proxy for the relative importance of a journal within its field, with journals with higher impact factors deemed to be more important than those with lower ones. The impact factor was devised by Eugene Garfield, the founder of the Institute for Scientific Information. Impact factors are calculated yearly starting from 1975 for those journals that are indexed in the Journal Citation Reports.

上面是维基百科对于影响因子这个词的解释。影响因子是由加菲尔德设计的一种测量指标。加菲尔德本人是美国科技信息研究所的创始人。每年的影响因子都会发表在Journal Citation Reports中,这个报告可以通过WebofKnowledge进行访问。

2014-12-14_234439

左侧可以设置具体要查看哪个引文体系中的JCR,这里包括Science Edition即SCI和Social Science Edition即SSCI。

右侧可以选择以什么方式进行浏览,默认是按照主题分类。

在接下来的页面中可以选择具体的主题和排序方式,比如情报学选择Information Science and Library Science。排序方式选择Impact Factor,这样就会按照影响因子从高到低进行排序。

2014-12-14_234749