簡體   English   中英

我可以使用哪個unicode字符來“標記”字符串?

[英]What unicode character I can use to “flag” a string?

我想代表一個具有多個文本屬性的對象,每個對象代表相同的文本值,但使用不同的語言。 如果用戶修改單個字段,則應該修改其他字段,而我正在考慮在其他字段的字符串開頭添加單個Unicode字符,然后檢查是否需要注意的字段,我只是必須檢查obj.text_prop[0]的值。

我可以為此使用哪個Unicode字符? 理想情況下,它將是不可打印的,並且在JS和JSON中受支持。

這種標記應該以其他方式在字符級別以外的協議級別上進行。 例如,考慮將每種語言版本作為對象而不是字符串。 這樣,除了包含字符串的屬性之外,該對象還可以具有諸如needsAttention之類的屬性。

但是,如果您需要將此類信息嵌入到字符串中,則可以使用ZERO WIDTH SPACE U + 200B。 因此,這意味着有換行的機會,但在此不應打擾。 主要問題可能是IE的舊版本可能將其顯示為一個小矩形。

另外,如果可以確保在不刪除該代碼點的情況下,從不將字符串從程序中發送到任何地方,則可以使用非字符代碼點,例如U + FFFF。 如Ch。 Unicode標准, 特殊區域和格式字符中的16個非字符代碼點保留供應用程序內部使用,切勿在文本交換中使用。

我建議您不要在行首使用奇怪的字符。 您可以實現以下內容:

<script type="text/javascript">
    function LocalizationSet(){};

    LocalizationSet.prototype.localizationItems = [];
    LocalizationSet.prototype.itemsNeedAttention = [];

    LocalizationSet.prototype.setLocalization = function(langId, text)
    {
        this.localizationItems[langId] = text;
        this.itemsNeedAttention[langId] = true;
    }

    LocalizationSet.prototype.getLocalization = function(langId)
    {
        return this.localizationItems[langId];
    }


    LocalizationSet.prototype.needsAttention = function(langId)
    {
        if(this.itemsNeedAttention[langId] == null)
        {
            return false;
        }
        return this.itemsNeedAttention[langId];
    }

    LocalizationSet.prototype.unsetAttentionFlags = function()
    {
        for(var it in this.itemsNeedAttention)
        {
            this.itemsNeedAttention[it] = false;
        }
    }

    //Example
    var set = new LocalizationSet();
    set.setLocalization("en","Hello");
    set.setLocalization("de","Willkommen");

    alert(set.needsAttention("en"));
    alert(set.needsAttention("de"));

    set.unsetAttentionFlags();
    alert(set.needsAttention("en"));
    set.setLocalization("en","Hi");
    alert(set.needsAttention("en"));
    //Shows true,true,false,true
</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM