Notes Java で日本語と英語以外の文字 (SJIS 範囲外) を取得しようとすると、ことごとく失敗してしまう模様。7.0 なので、バージョンの問題ならハッピーなんだけど。
例えば、Notes DB タイトルが以下のような韓国語だとする。
서울
LotusScript で以下のように実行すると、ステータスバーに正しい文字が表示される。
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.GetDatabase("server/domino","unicode.nsf")
Print db.Title
End Sub
しかし、以下のように Java Agent で実行した場合には ?? と出力されてしまう。
import lotus.domino.*;
import java.io.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
String servername = "server/domino";
Database db = session.getDatabase(servername,"unicode.nsf");
System.out.println(db.getTitle());
} catch(Exception e) {
e.printStackTrace();
}
}
}
Windows 上なので、Java コンソールが Windows-31j にセットされている可能性もあるので、byte を使って以下のようにアレンジしてみたけれど、ことごとく 0x3F で表示されてしまいます。。。
Notes Java Agent でなくて、外部 Notes Java プログラムにしても同じだし、Stream オブジェクトを使って、Charset を UTF-8 にしておいても同じ。
むぅ、これって Notes Java のバグじゃないのかなぁ。Unicode で扱うべきメソッドが、getTitle() メソッドを Call した時点で System Locale の Charset で扱ってしまっているような気がするんだけど。。。
import lotus.domino.*;
import java.io.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
String servername = "server/domino";
Database db = session.getDatabase(servername,"unicode.nsf");
byte bdbTitle[] = db.getTitle().getBytes();
ByteArrayInputStream bsdbTitle = new ByteArrayInputStream(bdbTitle);
InputStreamReader isdbTitle = new InputStreamReader(bsdbTitle);
int ch;
while ((ch = isdbTitle.read()) != -1) {
System.out.print("0x" + Integer.toHexString(ch).toUpperCase() + " ");
}
isdbTitle.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
全部 63
例えば、Notes DB タイトルが以下のような韓国語だとする。
서울
LotusScript で以下のように実行すると、ステータスバーに正しい文字が表示される。
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Set db = s.GetDatabase("server/domino","unicode.nsf")
Print db.Title
End Sub
しかし、以下のように Java Agent で実行した場合には ?? と出力されてしまう。
import lotus.domino.*;
import java.io.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
String servername = "server/domino";
Database db = session.getDatabase(servername,"unicode.nsf");
System.out.println(db.getTitle());
} catch(Exception e) {
e.printStackTrace();
}
}
}
Windows 上なので、Java コンソールが Windows-31j にセットされている可能性もあるので、byte を使って以下のようにアレンジしてみたけれど、ことごとく 0x3F で表示されてしまいます。。。
Notes Java Agent でなくて、外部 Notes Java プログラムにしても同じだし、Stream オブジェクトを使って、Charset を UTF-8 にしておいても同じ。
むぅ、これって Notes Java のバグじゃないのかなぁ。Unicode で扱うべきメソッドが、getTitle() メソッドを Call した時点で System Locale の Charset で扱ってしまっているような気がするんだけど。。。
import lotus.domino.*;
import java.io.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
String servername = "server/domino";
Database db = session.getDatabase(servername,"unicode.nsf");
byte bdbTitle[] = db.getTitle().getBytes();
ByteArrayInputStream bsdbTitle = new ByteArrayInputStream(bdbTitle);
InputStreamReader isdbTitle = new InputStreamReader(bsdbTitle);
int ch;
while ((ch = isdbTitle.read()) != -1) {
System.out.print("0x" + Integer.toHexString(ch).toUpperCase() + " ");
}
isdbTitle.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
全部 63