【问题标题】:Convert string to utf-8 unicode in ColdFusion在 ColdFusion 中将字符串转换为 utf-8 unicode
【发布时间】:2016-10-07 19:51:42
【问题描述】:

我需要将字符串转换为 UTF8 编码格式,但不知道如何继续。

ColdFusion 中是否有任何函数可以将字符串转换为 UTF-8,例如 website

例如,在上述网站中输入 "stackoverflow.com/questions/ask" 会得到结果:

\x73\x74\x61\x63\x6B\x6F\x76\x65\x72\x66\x6C\x6F\x77\x2E\x63\x6F\x6D\x2F\x71\x75\x65\x73\x74\ x69\x6F\x6E\x73\x2F\x61\x73\x6B

我对编码不是很熟悉,但是我的指令是将字符串编码为 UTF-8。我给出的示例给出了以下示例的编码结果。

/re/r/434/t//4r3/t434/4t/t3/3/4t/43tt/53/

我不确定这是否是编码字符串的真实表示,或者它是否只是为了提供视觉示例而输入的。有没有这样的格式?和第一个例子的格式有区别吗?

谢谢!

【问题讨论】:

  • (编辑)RE:我得到的示例给出了以下示例的编码结果你能给我们一些背景信息吗?这个例子的来源是什么?如果这是针对 API,您可以发布 URL 吗? RE:...例如在此网站上 该网站选择以十六进制显示 utf-8 二进制文件。 TryCF Example。注意结果是一样的,只是没有前导“\x”:即46 6F 6F 20...而不是\x46 \x6F \x6F \x20 ....
  • 感谢您提供更多信息。 “编码为 UTF8 ...”部分就是 using charsetDecode as mentioned below。 C# 代码只是抓取字符串的 utf8 二进制文件,即charsetDecode(someString, "utf-8")。如果您在使用完整的身份验证例程时遇到问题,您应该使用您尝试过的代码和结果打开一个单独的线程。
  • 运气好吗?如果您还没有弄清楚,我有一些想法。
  • 是的,问题实际上出在时间戳上,而不是字符串上。他们的文档不是很清楚。就编码而言,所需要的只是字符串为小写和 utf-8。感谢您的帮助!
  • 很高兴听到你想通了。可能会帮助下一个人遇到同样的问题 a)更新您的问题并附加有关该特定 API 问题的注释,然后 b)发布工作代码作为答案。

标签: unicode coldfusion


【解决方案1】:

我认为您可以结合使用CharsetDecode()CharsetEncode() 来完成此操作。

<cfset my_string = "test">
<cfset binary_my_string = CharsetDecode(my_string, "ASCII")>
<cfset utf8_my_string = CharsetEncode(binary_my_string, "utf-8")>

在我的示例中,您只需将 the correct initial encoding 替换为 "ASCII"

【讨论】:

  • 这似乎只是将字符串转换回初始字符串
  • 因为 ASCII 是 UTF8 的子集。看来您真正的问题是更大背景的一部分。就像我上面提到的,最好打开一个包含完整代码和结果的新线程,以便有人可以帮助您实现真正的目标,即实现 api 的身份验证规则。
【解决方案2】:
<cfset str = "stackoverflow.com/questions/ask">
<cfset hexStr = "">

<cfloop index="i" from="0" to="#len(str)-1#">
    <!--- Pick out each character in the string. Remember that charAt() starts at index 0. --->
    <cfset ch = str.charAt(i)>
    <!--- The decimal value of the Unicode character. ColdFusion uses the Java UCS-2 representation of Unicode characters, up to a value of 65536.  --->
    <cfset charDecVal = asc(ch)>
    <!--- The decimal value of the character, upper-casing the letters.--->
    <cfset charHexVal = uCase(formatBaseN(charDecVal,"16"))>
    <!--- Append the characters together into a Hex string, using delimiter '\x' --->
    <cfset hexStr = hexStr & "\x" & charHexVal>
</cfloop>
<cfscript>
    writeoutput(hexStr);
</cfscript>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 2010-09-21
    • 2016-09-02
    • 2012-02-22
    • 1970-01-01
    • 2021-07-06
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多