gpt4 book ai didi

c# - 替换 CSV 文件中的特殊字符

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:43 25 4
gpt4 key购买 nike

阅读 this StackOverflow 文章后,我意识到我的 CSV 文件也遇到了同样的问题,即有人将破折号/连字符 (-) 从 Word 复制并粘贴到 Excel 中。

我正在使用从 Excel 电子表格读取的数据创建自己的 CSV 文件,我注意到一些奇怪的字符,例如出现在 Excel 中,而在记事本中查看时却没有出现。当我使用 SSIS 将 CSV 文件传输到 SQL Server 表时,奇怪的东西也一直存在。检查每个的 ASC 值后,我决定用 ASC 45(连字符)字符替换 ASC 150(破折号),这解决了问题,在 Excel 中查看时连字符也正常显示。

这让我质疑其他哪些字符可能还需要被替换,以及是否有一个通用例程可以用来保护我的 CSV 文件免于出现类似问题。

这就是我目前对要写入 CSV 文件的每个值所做的操作。请注意,我的 getCharacterString 函数在返回与 ASCII 值关联的 ASC 字符方面类似于 VB 的 CHR 函数。

    /// <summary>
/// Locates occurrences of targeted special characters found in the input string and replaces each with a space.
/// </summary>
/// <param name="inputString">The input string.</param>
/// <returns>The updated inputString.</returns>
private string ReplaceSpecialCharacters(string inputString)
{
StringBuilder stringBuilder = new StringBuilder(inputString);

const string doubleQuoteCharacter = "\"";

stringBuilder.Replace("\r\n", " "); // Carriage Return/Line Feed characters replaced with single space
stringBuilder.Replace("\r", " "); // Carriage Return replaced with one space if only \r is found
stringBuilder.Replace("\n", " "); // Likewise, Line Feed with a single space
stringBuilder.Replace(this.columnSeparator, " "); // Tab
stringBuilder.Replace(Character.GetCharacterString(150), Character.GetCharacterString(45)); // Replace Dash with Hypen
stringBuilder.Replace(Character.GetCharacterString(147), doubleQuoteCharacter); // Replace angled left quote, “, with simple double quote, ".
stringBuilder.Replace(Character.GetCharacterString(148), doubleQuoteCharacter); // Replace angled left quote, “, with simple double quote, ".

return stringBuilder.ToString();
}

以下是我找到的转换函数:

// -----------------------------------------------------------------------
// <copyright file="Character.cs" company="Joes bar and grill">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------

namespace JoesBarAndGrill.FinanceIT.HhsSweeper
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

/// <summary>
/// TODO: Update summary.
/// </summary>
public static class Character
{
/// <summary>
/// See http://bytes.com/topic/c-sharp/answers/273734-c-chr-asc-function-equivalents-undocumented-truth.
/// </summary>
/// <param name="asciiValue"></param>
/// <returns></returns>
public static string GetCharacterString(int asciiValue)
{
if ((asciiValue < 0) || (asciiValue > 255))
{
throw new ArgumentOutOfRangeException("asciiValue", asciiValue, "Must be between 0 and 255.");
}
byte[] bytBuffer = new byte[] { (byte)asciiValue };
return Encoding.GetEncoding(1252).GetString(bytBuffer);
}

public static int GetAsciiValue(string character)
{
if (character.Length != 1)
{
throw new ArgumentOutOfRangeException("character", character, "Must be a single character.");
}
char[] chrBuffer = { Convert.ToChar(character) };
byte[] bytBuffer = Encoding.GetEncoding(1252).GetBytes(chrBuffer);
return (int)bytBuffer[0];
}
}
}

同样,我的问题是:

我需要做些什么才能想出一个通用方法来识别所有最终可能会出现此类转换问题的字符?我想我可能只确定了常见的。我也有兴趣让人们帮助我提出一个更完整的目标字符列表来替换和建议的替换字符。

我不确定这是否相关,但如果有人建议我在 CSV 文件中使用文本分隔符,我不会使用文本限定符,因为我确信 SSIS 2008 无法正确处理它们(请参阅 a previous question of mine )

最佳答案

删除所有脚本代码。编辑平面文件的连接对象。将代码页更改为 65001 (UTF-8)。

关于c# - 替换 CSV 文件中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14147312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com