2

Shiny のエンコーディングの問題に関するスレッドとパッケージの更新を読みましたが、(再現が難しい例) データベース駆動の Shiny アプリがいくつかの特殊文字をいじっています。

私のpostgresqlデータベースでは、スウェーデンの川「Upper Umeälven River」が正しく表示されます。これは、dplyrを使用してShinyインターフェイスにフィルターを戻すと 、Rの「Upper Umeälven River」names.rivers <- filter(tbl.rivers, Country == "Sweden") に なります。

ローカルで UTF-8 エンコーディングを使用しています。データベースとの交換で何かを失っていると思います。

Sys.getlocale() [1] "LC_COLLATE=French_France.1252;LC_CTYPE=French_France.1252;LC_MONETARY=French_France.1252;LC_NUMERIC=C;LC_TIME=French_France.1252"

例がないことを再度お詫びします。これは、データベースから取得する問題にすぎません。どこかでサニタイズ機能のフラグが欠落していると思われますが、正しい方向に向けるために助けが必要です。

4

2 に答える 2

1

予想通り、答えは簡単でした。 iconv(vector.to.convert, "UTF-8")

私の「学び」:

  1. ソース ファイル、データベース、およびデータ ストリームのエンコーディングは同じではありません。
  2. データストリームの (暗黙の?) 変換を無視して、データ ソースが正しいエンコーディングで作成されていることを確認するのに時間を費やしました。
  3. このページが役に立ちました: http://shiny.rstudio.com/articles/unicode.html

私の理解は少し浅いですが、率直に言って、現時点では文字エンコーディングの世界を深く掘り下げるつもりはありません。他の誰かがエラーを回避するのに役立つことを願っています!

于 2016-08-11T07:20:51.620 に答える
1

コード ページ 1252 Windows Latin 1では、'ä' のレンダリングUpper Umeälven Riverはコード ポイント 0xE4 (バイナリ 11100100) になります。

同じコード ページのUpper Umeälven Riverには、2 つのオクテット 0xC3A4 (XXX00011 XX100100) があります。

ただし、コード ポイントのUTF-8 エンコード規則を考慮すると、有効ビットはまったく同じです。

どこかで、文字を UTF-8 に変換する不注意または誤った文字エンコードが行われていますが、それでも文字列は Windows Latin 1 コード ページを持つと見なされます。

おそらく、データは既に UTF-8 で受信されており、それを反映するためにコード ページを受信コード ページに変更できます。どこかで静かな変化が起こっている可能性がありますが、その兆候はありません。

于 2016-08-10T18:15:01.423 に答える