3

行が '\n' または '\r' または '\r\n' で終了しているかどうかはわかりません。また、エンコードが utf-8 である場合に加えて、テキストが でエンコードされているものもわかりません。ボムなし。これを行うことができる関数またはライブラリはありますか、または行の終了を教えてください。

4

2 に答える 2

1

wcslen を使用して、utf8 文字列のバイト単位のサイズを取得します。

http://linux.die.net/man/3/wcslen

于 2013-03-28T13:07:40.697 に答える
1

テキストを読むために開いているファイルで、たまたまfgets、、、、などを使用していませんか? その場合、実装は、読み取り時にOS 固有の行末記号 (例: ) に自動的に変換し、書き込み時に OS 固有の行末記号に変換します。freadfputsfwrite"\r\n"'\n''\n'


他に 2 つのシナリオがあり、そのうちの 1 つは OP であることが判明しました。

  1. OPは"\r\n"他のOSソフトウェアから引き継がれることに苦労していたため、彼の(おそらくUnixのような)OSで読み取るためにファイルを開くと、それが変換されなくなりました。私の提案は、dos2unix二度と実行されない可能性が高いものでコードを肥大化させるのではなく、これらの 1 回限りの変換に使用することです。
  2. これらの関数のいずれも使用していません。これは、ソケットなどのストリームを使用していることが原因である可能性があり、おそらくプロトコルで"\r\n". この場合、strstr正確なシーケンスを見つけるために使用する必要があります"\r\n"

UTF-8 は ASCII とのある程度の互換性を考慮して設計されているため、UTF-8 を使用するシステムでは ASCII または類似の文字セットも使用されると想定できます。1 バイトを超えるシーケンスを使用する文字は、0x80 以上の値のみを使用して表現されます。0x00-0x7F の範囲内にあるため'\n'、1 バイトであり、マルチバイト文字の一部として存在しないことが保証されます。

于 2013-03-28T13:22:34.013 に答える