OpenXML SDK превосходит акцентированные французские символы (éèçà) [дубликат]

Angular1

Для людей, которые используют AngularJS , может справиться с этой ситуацией, используя Promises.

Здесь it говорит,

Обещания могут использоваться для отключения асинхронных функций и позволяют объединять несколько функций вместе.

blockquote>

Вы можете найти приятное объяснение здесь .

Пример, найденный в docs , упомянутом ниже.

  promiseB = promiseA.then(
    function onSuccess(result) {
      return result + 1;
    }
    ,function onError(err) {
      //Handle error
    }
  );

 // promiseB will be resolved immediately after promiseA is resolved 
 // and its value will be the result of promiseA incremented by 1.

Angular2 and Later

In Angular2, посмотрите на следующий пример, но его рекомендовал использовать Observables с Angular2.

 search(term: string) {
     return this.http
  .get(`https://api.spotify.com/v1/search?q=${term}&type=artist`)
  .map((response) => response.json())
  .toPromise();

}

Вы можете использовать это таким образом,

search() {
    this.searchService.search(this.searchField.value)
      .then((result) => {
    this.result = result.artists.items;
  })
  .catch((error) => console.error(error));
}

См. здесь оригинал . Но TypScript не поддерживает native es6 Promises , если вы хотите его использовать, для этого вам может понадобиться плагин.

Кроме того, здесь представлены обещания spec определите здесь.

12
задан AlexC 29 April 2013 в 15:28
поделиться

6 ответов

Это решение записано как исправление для приложения Java, однако вы должны иметь возможность сделать что-то подобное в C #. Вы также можете посмотреть документацию по классу StreamWriter , в примечаниях, которые она ссылается на знак порядка байтов (BOM).

8
ответ дан Ken Henderson 27 August 2018 в 15:55
поделиться

«ANSI as UTF8» (WTF?)

NotePad ++, вероятно, правильный. Кодировка UTF8 (т. Е. Правильный заголовок Юникода), но содержит только данные ANSI (т. Е. É не кодируется правильным способом UTF8, что означает два байта).

Или: это другой способ вокруг. Это ANSI (без спецификации заголовка файла), но кодировка отдельных символов является или выглядит UTF8. Это объясняет, что ü и другие символы расширяются более чем одним другим персонажем. Вы можете исправить это, заставив файл читать как Unicode.

Если вы можете опубликовать (часть) вашего CSV, мы сможем помочь его исправить в источнике.

Изменить

Теперь, когда мы увидели ваш код: вы можете удалить StreamWriter и заменить его TextWriter? Кроме того, удалите ручную кодировку спецификации, это необязательно. Когда вы создаете TextWriter, вы можете указать кодировку (не использовать ASCII, попробовать UTF8).

3
ответ дан Abel 27 August 2018 в 15:55
поделиться

Для моего сценария с использованием StreamWriter я явно передал кодировку UTF8 в excel для StreamWriter, чтобы прочитать файл, используя правильную кодировку.

См. этот ответ для более подробной информации: https://stackoverflow.com/a/22306937/999048

7
ответ дан Community 27 August 2018 в 15:55
поделиться

Тревор Жермен помог мне сохранить в правильном закодированном формате

using (var sw = File.Create(Path.Combine(txtPath.Text, "UTF8.csv"))) {
 var preamble = Encoding.UTF8.GetPreamble();  
 sw.Write(preamble, 0, preamble.Length);  
 var data = Encoding.UTF8.GetBytes("懘荧,\"Hello\",text");  
 sw.Write(data, 0, data.Length); 

}

2
ответ дан jAntoni 27 August 2018 в 15:55
поделиться

Я предлагаю вам открыть текстовый файл в шестнадцатеричном редакторе и посмотреть, что это на самом деле. Спецификация для UTF-16 равна 0xFEFF, которая, по-видимому, записывает код записи в поток, но в остальной части записи не указывается кодировка для использования - она ​​будет использовать кодировку по умолчанию StreamWriter, которая является UTF-8 ,

Когда вы открываете файл в шестнадцатеричном представлении, если вы видите много символов 0x00 между символами, вы работаете с UTF-16, который является кодировкой. Unicode в C #. Если между символами нет 0x00, кодировка, вероятно, UTF-8.

Если последний случай, просто исправьте спецификацию, чтобы быть EF BB BF, а не FE FF, и нормально читайте с помощью UTF- 8.

2
ответ дан Mark H 27 August 2018 в 15:55
поделиться

попробуйте следующее:

using (var sw = File.Create(Path.Combine(txtPath.Text, "UTF8.csv")))
{
  var preamble = Encoding.UTF8.GetPreamble();
  sw.Write(preamble, 0, preamble.Length);
  var data = Encoding.UTF8.GetBytes("懘荧,\"Hello\",text");
  sw.Write(data, 0, data.Length);
}

Он записывает правильную преамбулу UTF8 в файл перед записью CSV с кодировкой UTF8.

5
ответ дан Trevor Germain 27 August 2018 в 15:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: