android表情符号化と復号化
3890 ワード
多くの場合、サーバと対話したり、フロントエンドでテキストをファイルに保存したりするときは、記憶のため、符号化と復号化のプロセスを行う必要があります.そうしないと、取り出したり、保存したり、文字化けしたりすることはできません.(簡単な例)
xml
xml
Activity
// Android
public class MainActivity extends AppCompatActivity{
private EditText mInput;
private Button mControl;
private TextView mDisplay;
private String mContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initClick();
}
/**
*
*/
private void initView() {
mInput= (EditText) findViewById(R.id.input);
mControl= (Button) findViewById(R.id.control);
mDisplay= (TextView) findViewById(R.id.display);
}
/**
*
*/
private void initClick() {
mInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
mContent=encode(s.toString());
Log.e("TAG","---------"+mContent);
}
});
//
mControl.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDisplay.setText(decode(mContent));
}
});
}
/**
*
* @param content
* @return
*/
public static String encode(String content) {
StringBuilder sb = new StringBuilder(content.length() * 3);
for (char c : content.toCharArray()) {
if (c < 256) {
sb.append(c);
} else {
sb.append("\\u");
sb.append(Character.forDigit((c >>> 12) & 0xf, 16));
sb.append(Character.forDigit((c >>> 8) & 0xf, 16));
sb.append(Character.forDigit((c >>> 4) & 0xf, 16));
sb.append(Character.forDigit((c) & 0xf, 16));
}
}
return sb.toString();
}
/**
*
* @param content
* @return
*/
public static String decode(String content) {
final Pattern reUnicode = Pattern.compile("\\\\u([0-9a-zA-Z]{4})");
Matcher sMatcher = reUnicode.matcher(content);
StringBuffer sb = new StringBuffer(content.length());
while (sMatcher.find()) {
sMatcher.appendReplacement(sb,
Character.toString((char) Integer.parseInt(sMatcher.group(1), 16)));
}
sMatcher.appendTail(sb);
return sb.toString();
}
}