ExtendScript 将 unicode 字符解析为文本层

Extendscript parse unicode characters into text layer

我正在尝试编写一个脚本,将字符数组解析为 After Effects 中文本层的后续关键帧。一切正常。只有我想更改函数以读取 unicode 而不是普通文本。

这是我的脚本代码:

var textLayer = currentComp.layers.addText("test");
        textLayer.name = "score";
        textLayer.position.setValue([50,500]);

        //Chose the txt with the array
        var myFile = File.openDialog("Navigate to keyframe file.");
        myFile.open("r");

        var myLine = myFile.readln();
        var keyValues = myLine.split(",")

        var prop1 = app.project.item(1).layer(1).property("ADBE Text Properties").property("ADBE Text Document");

        var arrayLength = keyValues.length;

    //Keyframe Loop
    app.beginUndoGroup("Keys");

        for(var i=0; i<arrayLength; i++){
        prop1.setValueAtTime([i]/25,keyValues[i]);
        }
    app.endUndoGroup();

这是我要解析的字符串:

\u5c07,\u63a2,\u8a0e,\u53ca,\u5176,\u4ed6

这些都是unicode字符。

我试了一下你的代码。我也无法从文件中读取 unicode 字符。有效的是以 JSON 格式存储数据并解析它。 (在此处获取解析器 https://github.com/douglascrockford/JSON-js) 请参阅下面我修改后的代码。

这是JSON

的数据
["\u5c07","\u63a2","\u8a0e","\u53ca","\u5176","\u4ed6"]

这是修改后的脚本

#include "json2.js"
// use json parsers
// get it here https://github.com/douglascrockford/JSON-js
var main = function() {
  var currentComp = app.project.items.addComp("test", 800, 600, 1, 10, 25); // add a comp
  var textLayer = currentComp.layers.addText("test");
  textLayer.name = "score";
  textLayer.position.setValue([50, 500]);

  //Chose the JSON with the array
  var myFile = File.openDialog("Navigate to keyframe file.");
  if (myFile === null) return;  // stop if user cancels
  myFile.open("r"); 
  var content = myFile.read();// read the whole file
  var keyValues = JSON.parse(content);// parse its content, dont use eval
  // rest is as before
  var prop1 = app.project.item(1).layer(1).property("ADBE Text Properties").property("ADBE Text Document");
  // var arrayLength = keyValues.length; // dont need this
  //Keyframe Loop
  app.beginUndoGroup("Keys");
  for (var i = 0; i < keyValues.length; i++) {
    prop1.setValueAtTime([i] / 25, keyValues[i]);
  }
  app.endUndoGroup();
}
main();