java - 将 JSON 写入文件会给出什么结果?

标签 java json eclipse

我有一个 JSON 文件,其中包含不同的国家/地区和语言名称等。我想将其精简为我正在做的事情所需/想要的信息。例如我想转

[{
    "name": {
        "common": "Afghanistan",
        "official": "Islamic Republic of Afghanistan",
        "native": {
            "common": "\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646",
            "official": "\u062f \u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646 \u0627\u0633\u0644\u0627\u0645\u064a \u062c\u0645\u0647\u0648\u0631\u06cc\u062a"
        }
    },
    "tld": [".af"],
    "cca2": "AF",
    "ccn3": "004",
    "cca3": "AFG",
    "currency": ["AFN"],
    "callingCode": ["93"],
    "capital": "Kabul",
    "altSpellings": ["AF", "Af\u0121\u0101nist\u0101n"],
    "relevance": "0",
    "region": "Asia",
    "subregion": "Southern Asia",
    "nativeLanguage": "pus",
    "languages": {
        "prs": "Dari",
        "pus": "Pashto",
        "tuk": "Turkmen"
    },
    "translations": {
        "cym": "Affganistan",
        "deu": "Afghanistan",
        "fra": "Afghanistan",
        "hrv": "Afganistan",
        "ita": "Afghanistan",
        "jpn": "\u30a2\u30d5\u30ac\u30cb\u30b9\u30bf\u30f3",
        "nld": "Afghanistan",
        "rus": "\u0410\u0444\u0433\u0430\u043d\u0438\u0441\u0442\u0430\u043d",
        "spa": "Afganist\u00e1n"
    },
    "latlng": [33, 65],
    "demonym": "Afghan",
    "borders": ["IRN", "PAK", "TKM", "UZB", "TJK", "CHN"],
    "area": 652230
}, ...

进入

[{
    "name": {
        "common": "Afghanistan",
        "native": {
            "common": "\u0627\u0641\u063a\u0627\u0646\u0633\u062a\u0627\u0646"
        }
    },
    "cca2": "AF"
}, ...

但是当我尝试时我得到了

[{
    "name": {
        "common": "Afghanistan",
        "native": {
            "common": "?????????"   <-- NOT WHAT I WANT
        }
    },
    "cca2": "AF"
},

这是我用来删除我不想要的内容的重要代码。

byte[] encoded = Files.readAllBytes(Paths.get("countries.json"));
String JSONString =  new String(encoded, Charset.forName("US-ASCII"));
...
Writer writer = new OutputStreamWriter(new FileOutputStream("countriesBetter.json"), "US-ASCII");
writer.write(javaObject.toString());
writer.close();

我不明白为什么它将文本变成问号。我尝试了几种字符集都没有成功。当我使用 UTF-8 时,我得到 اÙ�غانستان

请帮助我。谢谢。

最佳答案

\u0627 是 unicode 而不是 ascii,你不能用 ascii 表示阿拉伯字符 - 因此是 ?。有关 utf 格式之间的差异,请参阅 Difference between UTF-8 and UTF-16?

当您以 UTF-8 写入时,您需要以相同的编码读取,以便“记事本”知道如何显示它所拥有的字节。如果您使用该编码将其读回 java,它将不会改变。

关于java - 将 JSON 写入文件会给出什么结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906020/

相关文章:

android - 谷歌地图在 android 上不断出现黑屏

Java jmenu 位于左侧

javascript - 通过 flask 将谷歌图表的列表信息正确发送到 JS?

json - 使用 Rest Api 的 Xamarin 中的 ListView

javascript - 如何更新 MooTools Request.HTML 调用中的多个元素

java - 如何在不指定类路径的情况下启动java应用程序?

java - R.java 不更新

java - 在 groovy bean 中注入(inject) Spring bean

java - 用于下载文件的rest api返回文件内容作为响应而不下载它

java - 如何关闭用 Java 1.4 编写的 Swing 应用程序中所有打开的对话框?