Unicode 如何在红移复制命令中消除“无中断空格”字符?

Unicode 如何在红移复制命令中消除“无中断空格”字符?,unicode,amazon-redshift,Unicode,Amazon Redshift,“我的复制”命令不断收到以下错误: 缺少换行符:在位置4194303处找到意外字符0x73 我通过以下函数来检查非ASCII字符: def return_non_ascii_codes(input: str): for char in input: if ord(char) > 127: yield ord(char) 发现我有很多返回160码的字符。在Unicode图表中查找该字符时,它似乎是一个非换行符字符: 我想在COPY命令中取

“我的复制”命令不断收到以下错误:

缺少换行符:在位置4194303处找到意外字符0x73

我通过以下函数来检查非ASCII字符:

def return_non_ascii_codes(input: str):
    for char in input:
        if ord(char) > 127:
            yield ord(char)  
发现我有很多返回160码的字符。在Unicode图表中查找该字符时,它似乎是一个非换行符字符:

我想在COPY命令中取消这些字符的空值,但不确定应该使用什么样的字符序列/格式

复制命令如下所示:

COPY xxx
FROM 's3://xxx/cleansed.csv'
WITH CREDENTIALS 'aws_access_key_id=xxx;aws_secret_access_key=xxx'
-- GZIP
ESCAPE
FILLRECORD
TRIMBLANKS
TRUNCATECOLUMNS
DELIMITER '|'
BLANKSASNULL
REMOVEQUOTES
ACCEPTINVCHARS
TIMEFORMAT 'auto'
DATEFORMAT 'auto';
编辑: 我使用Python查找字符,但Python不执行管道中的任何实际处理。我从我们的PostgreSQL数据库中执行一个COPY TO STDOUT命令,然后将这些文件直接上传到S3,以便复制到红移。因此,它需要在这两个地方之一处理

以下是目标表中的两个字段:

id                      BIGINT,
quiz_data               VARCHAR(65535)
更新1: 我通过一个函数运行脚本来清除所有非ASCII字符,如下所示:

with open(file, 'r') as inf, open(outfile, 'w') as outf:
        for line in inf:
            print(return_non_ascii_codes(line))
            outf.write(''.join(return_ascii_chars(line)))

def return_ascii_chars(input: str):
    return (char for char in input if ord(char) < 127)

我仔细检查了清理后的文件是否没有任何非ASCII字符…

yourvariable.replaceunichr160

COPY table1 FROM 's3://my_bucket' CREDENTIALS '' ACCEPTINVCHARS 
Use可以在copy命令中使用ACCEPTINVCHARS参数。 这很简单,很直接。
如果我做了一个错误的假设,请发表评论,我将重新关注我的答案。

但它从未在Python中运行过。它直接从PostgreSQL复制到STDOUT命令,然后加载到一个S3文件中。所以我需要在Redshift或PostgreSQL端处理它。那么为什么这个标记为python:?只是因为在OP中有一些python。标记不是这样工作的。您应该删除python标记。它已被删除。ACCEPTINVCHARS不起作用,我的命令中已经包含了它。@flybonzai-您是否尝试在copy命令中使用null作为'\0'参数?是的,我也这么做了。请发布示例数据和您的copy命令以及问题。我已经添加了副本,字段本身是一个470万字符的YAML字符串。。。。它是一只野兽
COPY table1 FROM 's3://my_bucket' CREDENTIALS '' ACCEPTINVCHARS