将utf-8转换为Unicode以在java中的字符串中查找表情符号

时间:2017-12-09 17:22:13

标签: java unicode utf-8

我正在尝试编写一个java代码,其中包含一个包含表情符号的utf8字符串,我想用文本替换该表情符号。 例如:

我有这样的文字:طلبتمنهممبالغكبيرةلإتمامدراستهم

我希望它像这样:    grinningFaceطلبتمنهممبالغكبيرةلإتمامدراستهم

我试过了:

function styleFooter() {
  var body = DocumentApp.getActiveDocument();
  var foot = body.getFooter().getParagraphs(); // gets a list of your footer paragraphs
  var style = {};
  style[DocumentApp.Attribute.HORIZONTAL_ALIGNMENT] = DocumentApp.HorizontalAlignment.CENTER;
  style[DocumentApp.Attribute.FONT_FAMILY] = 'Helvetica Neue';
  style[DocumentApp.Attribute.FONT_SIZE] = 9;

  // iterates each of your footer paragraphs
  foot.forEach(function(element) {
    element.setAttributes(style); 
  })
}

但它不起作用,该怎么做?

1 个答案:

答案 0 :(得分:4)

你的问题是表情符号不在Basic Multilingual Plane中,因为它的代码大于U + FFFF。 Java字符只有16位长,因此只有BMP中的字符才使用一个java字符。 BMP之外的字符以UTF16编码。

unicode表情符号是GRINNING FACE字符U + 1F600。它的utf8编码为0xf0,0x9f,0x98,0x80,其UTF-16编码(如Jon Skeet在其评论中所述)0xd83d, 0xde00。这意味着""的内部Java表示形式为"\ud83d\ude00",正如调试器可以显示的那样。

所以你的代码应该是:

string.replaceAll("\ud83d\ude00", "grinningF");

string.replaceAll("", "grinningF");

完全一样。