菜鸟教程小白 发表于 2022-12-13 02:18:23

ios - 如何在我的 NSString 中正确编码 Unicode 字符?


                                            <p><h1>问题陈述</h1>

<p>我创建了许多字符串,将它们连接成 CSV 格式,然后将字符串作为附件通过电子邮件发送。</p>

<p>当这些字符串仅包含 ASCII 字符时,将正确构建 CSV 文件并通过电子邮件发送。当我包含非 ASCII 字符时,结果字符串格式不正确,并且 CSV 文件未正确创建。 (电子邮件 View 显示附件,但未发送。)</p>

<p>例如,这是可行的:</p>

<pre><code>uncle bill&#39;s house of pancakes
</code></pre>

<p>但这不是(注意大撇号):</p>

<pre><code>uncle bill’s house of pancakes
</code></pre>

<h2>问题</h2>

<p>如何正确创建和编码最终字符串,以便包含所有有效的 unicode 字符并正确形成结果字符串?</p>

<h1>注意事项</h1>

<ul>
<li><p>字符串是通过 UITextField 创建的,然后写入核心数据存储区,然后再从核心数据存储区读取。</p></li>
<li><p>这表明问题在于字符串的初始创建和编码:<strong> <a href="https://stackoverflow.com/questions/5447413/nsstring-unicode-encoding-problem" rel="noreferrer noopener nofollow">NSString unicode encoding problem</a> </strong></p></li>
<li><p>我不想这样做:<strong> <a href="https://stackoverflow.com/questions/6361586/remove-non-ascii-characters-from-nsstring-in-objective-c" rel="noreferrer noopener nofollow">remove non ASCII characters from NSString in objective-c</a> </strong></p></li>
<li><p>字符串可以很好地写入数据存储或从数据存储中读取。字符串在应用程序的表格 View 中正确(单独)显示。该问题仅在将电子邮件附件的字符串连接在一起时才会出现。</p></li>
</ul>

<h3>字符串处理代码</h3>

<p>我像这样将我的字符串连接在一起:</p>

<pre><code>;
;
;
etc.
</code></pre>

<p>用无聊的引号代替大引号可以让它工作,但我不想这样做:</p>

<pre><code>- (NSMutableString *)cleanString:(NSString *)activity {
    NSString *temp1 = ;
    NSString *temp2 = ;
    NSString *temp3 = ;
    NSString *temp4 = ;
    return ;
}
</code></pre>

<p><strong>编辑:</strong>
电子邮件已发送:</p>

<pre><code>    NSString *attachment = ;
    mimeType:nil fileName:@&#34;MyCSVFile.csv&#34;];
</code></pre>

<p>其中 <code>formatReportCSV</code> 是连接并返回 csv 字符串的函数。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您似乎遇到了字符串编码问题。在没有看到您的核心数据模型是什么样子的情况下,我认为问题归结为以下代码重现的问题。</p>

<pre><code>NSString *string1 = @&#34;Uncle bill’s house of pancakes.&#34;;
NSString *string2 = @&#34; Appended with some garbage&#39;s stuff.&#34;;
NSMutableString *mutableString = ;
;
NSLog(@&#34;We got: %@&#34;, mutableString);
// We got: Uncle bill’s house of pancakes. Appended with some garbage&#39;s stuff.

NSData *storedVersion = ;
NSString *restoredString = [ initWithData: storedVersion encoding: NSStringEncodingConversionAllowLossy];
NSLog(@&#34;Restored string with NSStringEncodingConversionAllowLossy: %@&#34;, restoredString);
// Restored string with NSStringEncodingConversionAllowLossy:

storedVersion = ;
restoredString = [ initWithData: storedVersion encoding: NSUTF8StringEncoding];
NSLog(@&#34;Restored string with UTF8: %@&#34;, restoredString);
// Restored string with UTF8: Uncle bill’s house of pancakes. Appended with some garbage&#39;s stuff.
</code></pre>

<p>请注意第一个字符串(使用 ASCII 编码)如何无法处理非 ASCII 字符的存在(如果您使用 <code>dataUsingEncoding:allowsLossyConversion:</code> 并且第二个参数是 <code>是的</code>)。 </p>

<p>这段代码应该可以解决问题:</p>

<pre><code>NSString *attachment = ;
mimeType:nil fileName:@&#34;MyCSVFile.csv&#34;];
</code></pre>

<p>注意:如果您需要处理日语等非 UTF8 语言,您可能需要使用其中一种 UTF16 字符串编码。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在我的 NSString 中正确编码 Unicode 字符?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16078747/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16078747/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在我的 NSString 中正确编码 Unicode 字符?