Teradata转换中的Unicode到拉丁语

Teradata转换中的Unicode到拉丁语,unicode,teradata,teradata-sql-assistant,Unicode,Teradata,Teradata Sql Assistant,我一直在尝试在Teradata版本16.20.32.23中将Unicode字符串转换为拉丁语。我看过许多在线论坛,但我无法制定解决方案。以下是我无法转换的一些字符串: hyödyt löydät 我尝试了以下解决方案,但函数translate_chk似乎不起作用 SELECT CASE WHEN Translate_Chk ( 'hyödyt' using UNICODE_TO_LATIN) <> 0 THEN '' WHEN Translate_Chk

我一直在尝试在Teradata版本16.20.32.23中将Unicode字符串转换为拉丁语。我看过许多在线论坛,但我无法制定解决方案。以下是我无法转换的一些字符串:

hyödyt
löydät
我尝试了以下解决方案,但函数translate_chk似乎不起作用

SELECT CASE WHEN Translate_Chk ( 'hyödyt' using UNICODE_TO_LATIN) <> 0 
THEN
''
WHEN Translate_Chk ( 'hyödyt' using UNICODE_TO_LATIN ) = 0 
THEN
Translate ( 'hyödyt' using UNICODE_TO_LATIN WITH ERROR)
END AS transalated
翻译Chk时选择大小写('hyèdyt'使用UNICODE(拉丁语)0
然后
''
当使用UNICODE将Chk(“hyèdyt”)翻译为拉丁语时=0
然后
翻译('hyèdyt'使用UNICODE_到_拉丁语,有错误)
以转位结束
我收到的错误是
SELECT失败。6706:字符串包含不可翻译的字符。


我想我已经走到了死胡同,有人能帮我吗?

我不熟悉Teradata,但您的字符串被双重误码为
Windows-1252
,这是
ISO-8859-1
a.k.a
latin1
的变体。Python中要修复的示例:

>>> s='hyödyt'
>>> s.encode('cp1252').decode('utf8').encode('cp1252').decode('utf8')
'hyödyt'
>>> s='löydät'
>>> s.encode('cp1252').decode('utf8').encode('cp1252').decode('utf8')
'löydät'

因此,这不是一个Teradata解决方案,但应该可以帮助您解决这个问题。

下面是我使用的python代码,它可能会帮助某些人。要使用以下代码,您需要遵循以下说明:

根据您的python版本下载chilkat包:

请遵循以下URL中的安装指南:

打开IDLE shell并运行以下代码

import sys
import chilkat

charset = chilkat.CkCharset()

charset.put_FromCharset("utf-8")
charset.put_ToCharset("ANSI")


charset.put_ToCharset("Windows-1252")

success = charset.ConvertFile("source_file_name.csv","target_file_name.csv")
if (success != True):
    print(charset.lastErrorText())
    sys.exit()

print("Success.")

在16.20.31.01为我工作。顺便说一句,第二个WHE/THENN可以被其他代码替换。这段代码在我的环境中不工作的原因是什么?有什么建议吗?它与会话默认字符集有什么关系吗?不知道,我假设它将被设置为UTF-8或UTF-16。我不知道默认字符集与它有什么关系。检查隐藏/不可打印字符。否则,请找出您的案例陈述的哪一部分抛出了错误。谢谢您的指针。