【问题标题】:Convert Emoji UTF8 to Unicode in Powershell在 Powershell 中将 Emoji UTF8 转换为 Unicode
【发布时间】:2021-01-28 19:18:45
【问题描述】:

我需要使用 powershell 将数据保存在数据库中。有时数据中包含表情符号。

DB:在 DB 方面,一切都应该没问题。属性设置为 NVARCHAR,这使得保留表情符号成为可能。当我手动插入数据时,我查询它们后会显示表情符号(????????)。 我用 SSMS 中的示例数据对其进行了测试,效果很好。

Powershell:在 Powershell 中准备 SQL 语句时,我注意到表情符号是用 UTF8 (ðŸ¤ðŸ'°) 解释的。基本上是胡言乱语。

是否有必要从 UTF8 转换为 Unicode?我怎样才能将表情符号保留为??????????而不是 ðŸ¤ðŸ'°/1f600

【问题讨论】:

  • “从 UTF8 转换为 Unicode”这句话毫无意义 - Unicode 是代码点的抽象列表,而 UTF8 是以二进制形式表示这些代码点的方式之一。可能发生的是双重编码,或者将二进制格式误解为不同的编码。
  • 感谢您的澄清。尽管如此,表情符号在 powershell 中以 UTF-8 表示。我想让表情符号表示持久化,而不是 UTF8/Unicode 值
  • 不,它们不会“以 UTF-8 表示”,也没有“表情符号表示”之类的东西 - 数据库不是存储小图像,而是将字符存储在一些二进制编码,可能是 UTF-8 或 UTF-16。您所看到的是二进制表示被误解,并显示为如您所说的胡言乱语。这听起来可能有些迂腐,但更好地理解所涉及的概念将有助于您识别和解决问题。
  • ?????????????????????????????????????????? ????????????????????????????????????????????????

标签: powershell unicode encoding utf-8 emoji


【解决方案1】:

我的同事对这个问题有正确的答案。

要在 MS SQL 数据库中保留表情符号,您需要将列声明为 nvarchar(max)(max 不一定),我已经这样做了。

我试图像这样保留我在 PS 脚本中硬编码的示例数据

@{ description = "Example Description?? }

显然 VS Code 在数据之上添加了某种编码(我们的猜测)。

基本上解决了这个问题的方法是简单地从 API 请求数据并将其保存到数据库中,前缀字符串字面量为 N + nvarchar(max) 列数据类型

示例: SET @displayNameFormatted = N'"+$displayName+"' 然后在我的插入语句中包含该变量。

【讨论】:

    【解决方案2】:

    这是否回答了您的问题? “使用 NVARCHAR(size) 数据类型和前缀字符串文字与 N:” Add emoji / emoticon to SQL Server table

    powershell 中的 1 个表情符号是 2 个 utf16 代理字符,因为它的代码对于 16 位来说太高了。 Surrogates and Supplementary Characters

    '?'.length
    2
    

    Microsoft 使“unicode”成为一个令人困惑的术语,因为这就是他们所说的 utf16 文件编码。

    Powershell 5.1 不能自动识别 utf8 no bom 编码的脚本。

    我们不知道您的命令行实际上是什么,但另请参阅:Unicode support for Invoke-Sqlcmd in PowerShell

    【讨论】:

      猜你喜欢
      • 2021-08-16
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2018-09-18
      • 1970-01-01
      • 2017-02-24
      相关资源
      最近更新 更多