あなたが参照している文字列が単純な名前である場合、それらの長さは比較的小さいと思うので、パフォーマンスは問題になりません。
以下のコードを使用すると、任意の utf8 文字列を英語の文字との間でエンコード/デコードできます。
object LetterConverter {
private def toTwoLetters(byte: Byte): String = {
val num = byte + 128;
//range now from 0 to 255
val division = num / 26;
val modulo = num % 26;
val firstletter = ('a' + division).toChar.toString;
val secondletter = ('a' + modulo).toChar.toString;
firstletter + secondletter;
}
val byteRange = (-128 to 127).map(_.toByte);
val letters = byteRange.map(n => toTwoLetters(n));
private val byteToLetters = byteRange.zip(letters).toMap;
require(byteToLetters.size == 256, "size really is: " + byteToLetters.size);
private val lettersToByte = byteToLetters.map(_.swap);
require(lettersToByte.size == 256, "size really is: " + lettersToByte.size);
def bytesToLetters(bytes: Seq[Byte]): String = {
bytes.map(byte => byteToLetters(byte)).mkString;
}
def lettersToBytes(letters: String): Seq[Byte] = {
letters.sliding(2, 2).map(twoLetters => lettersToByte(twoLetters)).toSeq;
}
def encode(str: String, charset: Charset = Codec.UTF8): String = {
bytesToLetters(str.getBytes(charset));
}
def decode(letters: String, charset: Charset = Codec.UTF8): String = {
new String(lettersToBytes(letters).toArray, charset);
}
}
したがって、プレフィックスがあるとしましょう:com.pligor.service
したがって、英語以外の名前を持つとしましょう:Γιώργος
これは次のようなものに変換されfmaiefoiafmaiofa
ます: そして、それを追加して取得することができます:com.pligor.service.fmaiefoiafmaiofa
クライアント部分で名前を受け取った後、接尾辞を抽出し、fmaiefoiafmaiofa
それをデコードすることで元のギリシャ語の名前を取得できますΓιώργος
楽しみ!