查找并替换文件中的特殊字符

时间:2018-02-06 09:24:23

标签: groovy iso-8859-1 file-encodings

我正在尝试查找并替换ISO-8859-1编码的文件中的一些特殊字符,然后将结果写入以UTF-8编码的新文件:

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    [layout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
    layout.estimatedItemSize = CGSizeMake(self.breadScrumbCollectionView.frame.size.width, 30); 
self.breadScrumbCollectionView.collectionViewLayout = layout;

我的输入文件内容是:

  

“þ”:“ý”:“Þ”:“”ð“:”“Ý”:“”Г:”

问题是我的代码永远找不到指定的字符。 groovy脚本文件本身以UTF-8编码。我猜这可能是问题的原因,但后来我无法在ISO-8859-1中编码,因为我不能在其中写“Ş”“Ğ”等。

1 个答案:

答案 0 :(得分:1)

我拿了你的代码示例,用一个用charset ISO-8859-1编码的输入文件运行它,它按预期工作。你能仔细检查你的输入文件是否真的用ISO-8859-1编码?这是我做的:

  1. 我从您的问题中提取了文件内容并使用保存 - >将其保存(使用SublimeText)到文件/tmp/test.txt使用编码保存 - >西方(ISO 8859-1)

  2. 我使用以下Linux命令检查了文件编码:

    file -i /tmp/test.txt
    /tmp/test.txt: text/plain; charset=iso-8859-1
    
  3. 我将dumpfile变量与/tmp/test.txt文件和newfile变量设置为/tmp/test_2.txt

  4. 我运行你的代码,我在控制台中看到了:

    found a special char!
    found a special char!
    found a special char!
    found a special char!
    found a special char!
    found a special char!
    
  5. 我在IntelliJ IDEA中检查了Groovy文件的编码 - 它是UTF-8

  6. 我检查了输出文件的编码:

    file -i /tmp/test_2.txt
    /tmp/test_2.txt: text/plain; charset=utf-8
    
  7. 我检查了输出文件的内容:

    cat /tmp/test_2.txt 
    "ş": "ı": "Ş":" "ğ":" "İ":" "Ğ":"
    
  8. 我认为这不重要,但我使用了最新的Groovy 2.4.13

    我猜你的输入文件编码不正确。请仔细检查文件的编码是什么 - 当我保存相同的内容但使用UTF-8编码时,您的程序无法按预期工作,我在控制台中看不到任何found a special char!条目。当我显示ISO-8859-1文件的内容时,我看到类似的东西:

    cat /tmp/test.txt 
    "�": "�": "�":" "�":" "�":" "�":"% 
    

    如果我使用UTF-8保存相同的内容,我会看到文件的可读内容:

    cat /tmp/test.txt
    "þ": "ý": "Þ":" "ð":" "Ý":" "Ð":"%  
    

    希望它有助于找到问题的根源。